Submission #884435

#TimeUsernameProblemLanguageResultExecution timeMemory
884435gutzzySirni (COCI17_sirni)C++14
42 / 140
524 ms786432 KiB
#include <bits/stdc++.h> using namespace std; vector<int> par; int find(int x){ if(par[x]==x) return x; par[x] = find(par[x]); return par[x]; } void merge(int x, int y){ x = find(x); y = find(y); par[max(x,y)] = min(x,y); } int main(){ int n; cin >> n; vector<int> ps(n); int m = 0; for(int i=0;i<n;i++){ cin >> ps[i]; m = max(m,ps[i])+1; } // minimum spanning tree vector<pair<int,pair<int,int>>> edges; par = vector<int>(m); for(int i=0;i<m;i++) par[i] = i; for(int i=0;i<n;i++){ int l = ps[i]; for(int j=i;j<n;j++){ int r = ps[j]; edges.push_back({min(l%r,r%l),{l,r}}); } } sort(edges.begin(),edges.end()); int ans = 0; int v = 0; for(auto e:edges){ int a = e.second.first; int b = e.second.second; if(find(a)!=find(b)){ merge(a,b); ans += e.first; v++; if(v==n-1) break; } } cout << ans << 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...