Submission #1026536

#TimeUsernameProblemLanguageResultExecution timeMemory
1026536vjudge1Sirni (COCI17_sirni)C++17
42 / 140
1075 ms786432 KiB
#include <bits/stdc++.h> using namespace std; int n, p[100000], dsu[100000], h[100000]; priority_queue<pair<int, pair<int, int> > > q; int findRoot(int k) { while(dsu[k] != k) k = dsu[k]; return k; } void unite(int a, int b) { a = findRoot(a); b = findRoot(b); if(h[a] > h[b]) swap(a, b); dsu[a] = b; h[b] = max(h[a] + 1, h[b]); } int main() { cin>>n; for(int i = 0; i < n; i++) { cin>>p[i]; dsu[i] = i; h[i] = 1; } for(int i = 0; i < n; i++) for(int j = i + 1; j < n; j++) q.push({-(max(p[i], p[j]) % min(p[i], p[j])), {i, j}}); long long res = 0; while(q.size()) { int d = -q.top().first; int a = q.top().second.first; int b = q.top().second.second; q.pop(); //cout<<endl<<"d: "<<d<<" a: "<<a<<" b: "<<b; if(findRoot(a) == findRoot(b)) continue; //cout<<" +"; unite(a, b); res += d; } //cout<<endl; cout<<res<<endl; 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...