#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |