This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
#include <bits/stdc++.h>
using namespace std;
struct dsu
{
vector<int> y;
dsu(size_t n)
{
y = vector<int>(n, -1);
}
int repr(int u)
{
return y[u] < 0 ? u : (y[u] = repr(y[u]));
}
void merge(int u, int v)
{
u = repr(u);
v = repr(v);
if (u == v)
return;
if (y[u] < y[v])
swap(u, v);
y[v] += y[u];
y[u] = v;
}
bool same_set(int u, int v)
{
return repr(u) == repr(v);
}
int set_size(int u)
{
return -y[repr(u)];
}
};
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
size_t n;
cin >> n;
vector<unsigned> p(n);
for (unsigned &x : p)
cin >> x;
sort(p.begin(), p.end());
p.resize(unique(p.begin(), p.end()) - p.begin());
n = p.size();
vector<bool> is_present(p.back() + 1, 0);
for (unsigned const &x : p)
is_present[x] = 1;
dsu d(n);
uint64_t cost = 0;
for (unsigned k = 0; k <= p.back() / 2; k++)
{
size_t i = upper_bound(p.begin(), p.end(), k) - p.begin();
while (i < p.size())
{
if (is_present[p[i]])
for (unsigned m = p[i] + k; m <= p.back(); m += p[i])
{
if (is_present[m])
{
size_t j = lower_bound(p.begin(), p.end(), m) - p.begin();
if (!d.same_set(i, j))
{
cost += k;
d.merge(i, j);
if (d.set_size(i) == n)
{
cout << cost << '\n';
return 0;
}
}
}
}
i++;
}
}
}
Compilation message (stderr)
sirni.cpp: In function 'int main()':
sirni.cpp:83:47: warning: comparison of integer expressions of different signedness: 'int' and 'size_t' {aka 'long unsigned int'} [-Wsign-compare]
83 | if (d.set_size(i) == n)
| ~~~~~~~~~~~~~~^~~~
# | 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... |