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>
#define ll long long
using namespace std;
int a[100009];
int p[100009],s[100009];
int N[10000009];
vector<pair<int,pair<int,int> > > E;
void ad(int x, int y){
if(x != y)
E.push_back({min(a[x]%a[y], a[y]%a[x]), {x,y}});
}
int P(int x){
if(p[x] == x) return x;
p[x] = P(p[x]);
return p[x];
}
ll ans = 0;
void un(int x, int y, int z){
x = P(x); y = P(y);
if(x == y) return;
if(s[x] > s[y]) swap(x, y);
p[x] = y;
s[x] += s[y];
ans += z;
}
main(){
int n;
cin >> n;
for(int i = 1; i <= n; i++){
cin >> a[i];
p[i] = i;
s[i] = 1;
}
sort(a+1, a+n+1);
vector<int> v;
for(int i = 1;i <= n; i++){
if(a[i] == a[i-1]) continue;
N[a[i]] = i;
v.push_back(i);
}
for(int i = a[n]; i >= 0; i--){
if(!N[i]) N[i] = N[i+1];
}
for(int i = 1; i < v.size(); i++){
int x = v[i];
for(int j = 0; j * a[x] <= a[n]; j++){
int y = N[j*a[x]];
if(y == x && a[y] < a[n]) y = N[a[y]+1];
ad(x, y);
}
}
sort(E.begin(), E.end());
for(auto e: E){
int x = e.second.first, y = e.second.second;
un(x, y, e.first);
}
cout << ans << endl;
}
Compilation message (stderr)
sirni.cpp:26:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
26 | main(){
| ^~~~
sirni.cpp: In function 'int main()':
sirni.cpp:45:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
45 | for(int i = 1; i < v.size(); i++){
| ~~^~~~~~~~~~
# | 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... |