#include <bits/stdc++.h>
using namespace std;
#define pb push_back
const int nmax = 1e7 + 5;
int a[nmax], vis[nmax];
struct E {
int u, v, w;
bool operator<(const E &other) const {
return w < other.w;
}
};
vector<E> edges;
class DSU
{
private:
vector<int> parent, rank;
public:
DSU(int n)
{
parent.resize(n + 1);
rank.resize(n + 1, 0);
for (int i = 1; i <= n; i++)
{
parent[i] = i;
}
}
int find_set(int v)
{
if (v == parent[v])
return v;
return parent[v] = find_set(parent[v]);
}
bool union_sets(int a, int b)
{
a = find_set(a);
b = find_set(b);
if (a != b)
{
if (rank[a] < rank[b])
swap(a, b);
parent[b] = a;
if (rank[a] == rank[b])
rank[a]++;
return false;
}
return true;
}
};
int n;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> n;
for (int i = 1; i <= n; i++)
{
cin >> a[i];
vis[a[i]] = i;
}
DSU dsu(n);
sort(a + 1, a + n + 1);
n = unique(a + 1, a + n + 1) - a - 1;
a[n + 1] = 1e9;
int m = a[n];
for (int i = 1; i <= n; i++)
{
for (int j = 2 * a[i]; j <= m; j += a[i])
{
int l = upper_bound(a + 1, a + n + 2, j - a[i]) - a;
if (a[l] <= j)
{
edges.push_back({i, l, a[l] % a[i]});
}
}
}
sort(edges.begin(), edges.end());
int res = 0;
for (auto [u, v, w] : edges) {
if(!dsu.union_sets(u, v)) {
res += w;
}
}
cout << res;
}
# | 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... |