제출 #1355673

#제출 시각아이디문제언어결과실행 시간메모리
1355673zeyd123Sirni (COCI17_sirni)C++20
42 / 140
933 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()
#define yes cout << "YES\n"
#define no cout << "NO\n"
#define debug cout << "Debug\n"

/*
      ---===ASCII help===---
     '0' -> 48     '9' -> 57
     'A' -> 65     'Z' -> 90
     'a' -> 97     'z' -> 122
*/

inline void USACO(string filename) {
    freopen((filename + ".in").c_str(), "r", stdin);
    freopen((filename + ".out").c_str(), "w", stdout);
}

ll mod = 1000000007;

vector<int> r, sz;

ll 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];
    }
}

void solve() {
    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";
}

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    int t = 1;
    //cin >> t;
    while (t--) {
        solve();
    }
}
#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...