Submission #310382

#TimeUsernameProblemLanguageResultExecution timeMemory
310382thecodingwizardSirni (COCI17_sirni)C++11
98 / 140
5112 ms207704 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; #define pb push_back #define mp make_pair #define f first #define s second #define ii pair<int, int> int pa[100000], sz[100000]; int findSet(int x) { return pa[x] == x ? x : pa[x] = findSet(pa[x]); } void unite(int a, int b) { a = findSet(a); b = findSet(b); if (sz[a] > sz[b]) swap(a, b); pa[a] = b; sz[b] += sz[a]; } int main() { cin.tie(0); ios_base::sync_with_stdio(false); int n; cin >> n; set<int> nums; for (int i = 0; i < n; i++) { int p; cin >> p; nums.insert(p); } map<int, int> idx; int ctr = 0; for (int num : nums) { idx[num] = ctr++; } for (int i = 0; i < n; i++) { sz[i] = 1; pa[i] = i; } vector<pair<int, ii>> edges; for (int num : nums) { int prev = -1; for (int i = num; i <= 1e7; i += num) { auto it = i == num ? nums.upper_bound(i) : nums.lower_bound(i); if (it != nums.end()) { if (prev == *it) continue; prev = *it; edges.pb(mp((*it) % num, mp(idx[num], idx[*it]))); } else { break; } } /* for (int num2 : nums) { if (num < num2) edges.pb(mp(num2%num, mp(idx[num], idx[num2]))); } */ } sort(edges.begin(), edges.end()); ll ans = 0; for (auto e : edges) { if (e.s.s >= ctr) continue; if (findSet(e.s.f) != findSet(e.s.s)) { ans += e.f; unite(e.s.f, e.s.s); } } 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...