제출 #1168609

#제출 시각아이디문제언어결과실행 시간메모리
1168609HanksburgerSirni (COCI17_sirni)C++20
112 / 140
5093 ms82984 KiB
#include <bits/stdc++.h> #define int long long using namespace std; int exist[10000005], par[100005], sz[100005]; vector<int> adj[100005], vec; int findPar(int u) { return par[u]==u?u:(par[u]=findPar(par[u])); } int addEdge(int u, int v) { if (findPar(u)==findPar(v)) return 0; if (sz[par[u]]>sz[par[v]]) swap(u, v); sz[par[v]]+=sz[par[u]]; par[par[u]]=par[v]; return 1; } signed main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n, ans=0; cin >> n; for (int i=0; i<n; i++) { int x; cin >> x; vec.push_back(x); } sort(vec.begin(), vec.end()); vec.resize(unique(vec.begin(), vec.end())-vec.begin()); for (int i=0; i<vec.size(); i++) { exist[vec[i]]=i+1; par[i]=i; sz[i]=1; } for (int i=0;; i++) { for (int j=i+1; j<=10000000; j++) { if (!exist[j]) continue; if (j<=100) { for (int k=0; k<vec.size(); k++) if (vec[k]%j==i && addEdge(exist[j]-1, k)) ans+=i; } else { for (int k=j+i; k<=10000000; k+=j) if (exist[k] && addEdge(exist[j]-1, exist[k]-1)) ans+=i; } } if (sz[findPar(0)]==vec.size()) { cout << ans; 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...