제출 #1355674

#제출 시각아이디문제언어결과실행 시간메모리
1355674zeyd123Sirni (COCI17_sirni)C++20
42 / 140
955 ms851968 KiB
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()

vector<int> r, sz;

int root(int x) {
    if (r[x] == x) return x;
    r[x] = root(r[x]);
    return r[x];
}

void unite(int x, int y) {
    x = root(x); y = root(y);
    if (x == y) return;
    if (sz[x] > sz[y]) {
        r[y] = x;
        sz[x] += sz[y];
    }
    else {
        r[x] = y;
        sz[y] += sz[x];
    }
}

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    int n; cin >> n;
    vector<int> p(n);
    vector<array<int, 3>> Kruskal;
    for (int& x : p) cin >> x;
    for (int i = 0; i < n; i++) for (int j = i + 1; j < n; j++) Kruskal.push_back({min(p[i]%p[j], p[j]%p[i]), i, j});
    sz.assign(n, 1);
    r.resize(n);
    for (int i = 0; i < n; i++) r[i] = i;
    sort(all(Kruskal));
    ll ans = 0;
    for (auto [d, a, b] : Kruskal) {
        if (root(a) != root(b)) ans += d;
        unite(a, b);
    }
    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...