제출 #884424

#제출 시각아이디문제언어결과실행 시간메모리
884424gutzzySirni (COCI17_sirni)C++14
42 / 140
1473 ms786432 KiB
#include <bits/stdc++.h> using namespace std; int find(int x, vector<int> &par){ if(par[x]==x) return x; par[x] = find(par[x],par); return par[x]; } void merge(int x, int y, vector<int> &par){ x = find(x,par); y = find(y,par); par[max(x,y)] = min(x,y); } int main(){ int n; cin >> n; vector<int> ps(n); unordered_map<int,int> pton; for(int i=0;i<n;i++){ cin >> ps[i]; pton[ps[i]] = i; // si p son diferents!! (no ho diu a l'enunciat..) } // minimum spanning tree vector<pair<int,pair<int,int>>> edges; vector<int> par(n); for(int i=0;i<n;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),{pton[l],pton[r]}}); } } sort(edges.begin(),edges.end()); int ans = 0; for(auto e:edges){ int a = e.second.first; int b = e.second.second; if(find(a,par)!=find(b,par)){ merge(a,b,par); ans += e.first; } } 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...