Submission #1309929

#TimeUsernameProblemLanguageResultExecution timeMemory
1309929dodjingSirni (COCI17_sirni)C++20
0 / 140
82 ms8368 KiB
#include <bits/stdc++.h>
using namespace std;

struct DSU {
    vector<int> p, r;
    DSU(int n) : p(n), r(n,0) {
        iota(p.begin(), p.end(), 0);
    }
    int find(int x) {
        return p[x] == x ? x : p[x] = find(p[x]);
    }
    bool unite(int a, int b) {
        a = find(a); b = find(b);
        if (a == b) return false;
        if (r[a] < r[b]) swap(a,b);
        p[b] = a;
        if (r[a] == r[b]) r[a]++;
        return true;
    }
};

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int N;
    cin >> N;
    vector<int> P(N);
    for (int i = 0; i < N; i++) cin >> P[i];

    sort(P.begin(), P.end());

    unordered_map<int, int> pos;
    for (int i = 0; i < N; i++) pos[P[i]] = i;

    DSU dsu(N);

    int maxP = P.back();
    for (int i = 0; i < N; i++) {
        for (long long m = 2LL * P[i]; m <= maxP; m += P[i]) {
            if (pos.count(m)) {
                dsu.unite(i, pos[m]);
            }
        }
    }

    vector<tuple<int,int,int>> edges;
    for (int i = 0; i + 1 < N; i++) {
        int cost = P[i+1] % P[i];
        edges.emplace_back(cost, i, i+1);
    }

    sort(edges.begin(), edges.end());

    long long ans = 0;
    for (auto &[w,u,v] : edges) {
        if (dsu.unite(u,v)) ans += w;
    }

    cout << ans << "\n";
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...