Submission #715975

#TimeUsernameProblemLanguageResultExecution timeMemory
715975ismayilSirni (COCI17_sirni)C++17
98 / 140
1430 ms786432 KiB
#include <bits/stdc++.h> #define int long long using namespace std; const int MAX = 1e7 + 7; int parent[MAX]; int _find(int i){ if(parent[i] < 0) return i; return parent[i] = _find(parent[i]); } bool _union(int u, int v){ u = _find(u), v = _find(v); if(u == v) return false; if(parent[u] > parent[v]) swap(u, v); parent[u] += parent[v]; parent[v] = u; return true; } signed main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n; cin>>n; vector<int> P(n); for(auto& i : P) cin>>i; sort(P.begin(), P.end()); int _max = P[n - 1]; int _next[MAX] = {0}; for(auto i : P) _next[i] = i; for (int i = _max; i >= 0; i--) { if(_next[i] != 0) continue; _next[i] = _next[i + 1]; } vector<pair<int, int>> edges[MAX]; for(int i = 0; i < n; i++){ if(i != 0 && P[i - 1] == P[i]) continue; int a = P[i]; if(a == _max) continue; for (int j = a; j <= _max; j += a) { int b; if(j == P[i]) b = _next[j + 1]; else b = _next[j]; if(j / a == b / a) edges[b % a].push_back({a, b}); } } memset(parent, -1, sizeof(parent)); int ans = 0; for(int i = 0; i <= (_max / 2); i++){ for(auto& j : edges[i]){ if(_union(j.first, j.second)) ans += i; } } cout<<ans; }
#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...