Submission #1194230

#TimeUsernameProblemLanguageResultExecution timeMemory
1194230SnowRaven52Sirni (COCI17_sirni)C++20
0 / 140
226 ms286912 KiB
#include <bits/stdc++.h> using namespace std; struct DisjointSets { vector<int> e; DisjointSets(int n): e(n, -1) { } int find(int x) { return e[x] < 0 ? x : e[x] = find(e[x]); } bool unite(int a, int b) { a = find(a); b = find(b); if (a == b) return false; if (-e[a] > -e[b]) swap(a,b); e[b] += e[a]; e[a] = b; return true; } bool connected(int a, int b) { return find(a) == find(b); } }; int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); int n; cin >> n; vector<int> a(n); for(int &x : a) cin >> x; sort(a.begin(), a.end()); a.erase(unique(a.begin(), a.end()), a.end()); n = (int)a.size(); int M = a.back(); vector<int> nxt(M+2, 0); vector<vector<pair<int,int>>> edges(M+1); for(int i = 0; i < n; i++){ nxt[a[i]] = -(i+1); } for(int i = M-1; i >= 0; i--){ if(nxt[i] == 0){ nxt[i] = nxt[i+1]; } if (nxt[i] < 0) nxt[i] = -nxt[i]; } for(int i = 0; i < n-1; i++){ int ai = a[i]; for(int j = ai; j <= M; j += ai){ int idx = nxt[j]; if (idx == 0) break; int at = a[idx - 1]; int diff = at - j; if (diff < 0 || at >= ai + j) continue; edges[diff].emplace_back(i+1, idx); } } DisjointSets dsu(n); long long ans = 0; for(int cost = 0; cost <= M; cost++){ for(auto &e : edges[cost]){ int u = e.first - 1; int v = e.second - 1; if (!dsu.connected(u, v)){ dsu.unite(u, v); ans += cost; } } } cout << ans << endl; }
#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...