Submission #856140

#TimeUsernameProblemLanguageResultExecution timeMemory
856140vjudge1Sirni (COCI17_sirni)C++17
0 / 140
5101 ms199632 KiB
//author: Ahmet Alp Orakci #include <bits/stdc++.h> using namespace std; using i64 = long long; struct DSU { int n; vector <int> par; DSU(int n) : n(n) { par.resize(n); iota(par.begin(), par.end(), 0); } inline int get(int a) { return par[a] = (par[a] == a ? a : get(par[a])); } bool same(int u, int v) { return get(u) == get(v); } bool unite(int u, int v) { if(same(u, v)) return false; par[get(u)] = get(v); return true; } }; #define ONLINE_JUDGE void solve() { int n; cin >> n; vector <int> vec(n); for(int &i : vec) cin >> i; priority_queue <tuple <int, int, int>, vector <tuple <int, int, int>>, greater <tuple <int, int, int>>> pq; for(int i = 0; i < int(13E6); i++) { int a = rand() % n, b = rand() % n; pq.emplace(min(vec[a] % vec[b], vec[b] % vec[a]), a, b); } i64 res = 0; DSU dsu(n); while(!pq.empty()) { auto [c, u, v] = pq.top(); pq.pop(); if(dsu.unite(u, v)) { res += c; } } cout << res; return; } signed main() { #ifndef ONLINE_JUDGE freopen(".in", "r", stdin); freopen(".out", "w", stdout); #endif ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int t = 1; //cin >> t; for(int i = 1; i <= t; i++) { solve(); } return 0; }
#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...