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;
typedef long long ll;
const ll MOD = 1e9+7;
const int N = 1e3+5;
int n,p[N],par[N];
vector<int>v[N];
ll ans;
struct Edge{
int from,to;
ll w;
Edge(int _from=0,int _to=0,ll _w=0){
from=_from;
to=_to;
w=_w;
}
bool operator < (const Edge &t) const{
return w<t.w;
}
};
vector<Edge>e;
int Find(int x){if(par[x]==x)return x;return Find(par[x]);}
void Unite(int x,int y){
x=Find(x);
y=Find(y);
par[x]=y;
}
int main()
{
ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
cin>>n;
for(int i=1;i<=n;i++){
cin>>p[i];
par[i]=i;
}
for(int i=1;i<=n;i++){
for(int j=i+1;j<=n;j++){
int cost=min(p[i]%p[j],p[j]%p[i]);
e.push_back(Edge(i,j,cost));
}
}
sort(e.begin(),e.end());
for(auto t:e){
int from=t.from;
int to=t.to;
ll w=t.w;
if(Find(from)!=Find(to)){
Unite(from,to);
ans+=w;
}
}
cout<<ans;
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... |