Submission #890042

#TimeUsernameProblemLanguageResultExecution timeMemory
890042codefoxSirni (COCI17_sirni)C++14
0 / 140
3047 ms786432 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define pii pair<int, int> #define int ll #define f first #define s second vector<int> rep; int finde(int i) { if (i != rep[i]) rep[i] = finde(rep[i]); return rep[i]; } int32_t main() { int n; cin >> n; vector<int> nums; vector<int> mult(1e7+1, -1); vector<bool> vis(1e7+1, 0); for(int i = 0; i < n; i++) { int a; cin >> a; if (vis[a]) continue; vis[a] = true; nums.push_back(a); } sort(nums.begin(), nums.end()); ll sol = 0; n = nums.size(); int curr = 0; int val = -1; for (int i = 0; i < n; i++) { int ele = nums[i]; while (curr < ele) { mult[curr] = val; curr++; } val = i; } while (curr <= 1e7) { mult[curr] = val; curr++; } vector<vector<pii>> dist(1e7); rep = vector<int>(n); iota(rep.begin(), rep.end(), 0); for (int i = 0; i < n; i++) { for (int j = nums[i]; j <= 1e7; j+=nums[i]) { int best = mult[j]; if (best != -1) dist[j-nums[best]].push_back({i, best}); } } int c = 0; for (int i = 0; i < 1e7; i++) { for (pii ele:dist[i]) { if (finde(ele.f) !=finde(ele.s)) { sol+=i; rep[finde(ele.f)]=finde(ele.s); c++; } } if (c==n-1) break; } cout << sol; 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...