Submission #1245914

#TimeUsernameProblemLanguageResultExecution timeMemory
1245914mcsar2002Sirni (COCI17_sirni)C++20
112 / 140
5106 ms434672 KiB
#include <bits/stdc++.h> #define ll long long using namespace std; struct edge{ int u, v, w; }; const int N = 1e5 + 7; const int P = 1e7 + 7; int par[N], nxt[P]; vector<int> p; vector<edge> e; int root(int u) { return u == par[u] ? u : par[u] = root(par[u]); } bool dsu(int u, int v) { if ((u = root(u)) == (v = root(v))) return false; par[v] = u; return true; } signed main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n; cin >> n; for (int i = 1; i <= n; i++) { int x; cin >> x; p.push_back(x); } sort(p.begin(), p.end()); p.erase(unique(p.begin(), p.end()), p.end()); n = p.size(); iota(par, par + n, 0); for (int i = 0; i < n; i++) { nxt[p[i]] = i; for (int j = p[i] + 1; j < p[i + 1]; j++) { nxt[j] = i + 1; } } nxt[p[n - 1]] = n - 1; for (int i = 0; i < n; i++) { e.push_back({i, nxt[p[i] + 1], p[nxt[p[i] + 1]] % p[i]}); for (int j = (p[nxt[p[i] + 1]] / p[i] * p[i]) + p[i]; j <= p[n - 1]; j += p[i]) { e.push_back({i, nxt[j], p[nxt[j]] % p[i]}); j = p[nxt[j]] / p[i] * p[i]; } } sort(e.begin(), e.end(), [&](edge x, edge y) { return x.w < y.w; }); int ans = 0; for (auto x : e) { if (!dsu(x.u, x.v)) continue; ans += x.w; } cout << ans << '\n'; 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...