#include <bits/stdc++.h>
using namespace std;
struct Edge{
int u,v;
long long w;
bool operator<(Edge const& o)const{return w<o.w;}
};
struct DSU{
vector<int> par,rank;
DSU(int n):par(n+1),rank(n+1){}
void make_set(int u){
par[u]=u;
rank[u]=0;
}
int find_set(int v){return par[v]==v?v:find_set(par[v]);}
bool union_set(int u,int v){
u=find_set(u);
v=find_set(v);
if(u!=v){
if(rank[u]<rank[v]) swap(u,v);
par[v]=u;
if(rank[u]==rank[v]) rank[u]++;
return 1;
}
else return 0;
}
};
vector<vector<pair<int,int>>> adj;
vector<Edge> e;
bool d[1000006][11];
int n,p[100005];
int main()
{
ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
cin>>n;
for(int i=1;i<=n;i++) cin>>p[i];
p[0]=1e9;
int idx=0;
for(int i=1;i<=n;i++) if(p[i]<p[idx]) idx=i;
for(int i=1;i<=n;i++){
if(i==idx) continue;
int w=min(p[i]%p[idx],p[idx]%p[i]);
e.push_back({idx,i,w});
}
vector<pair<int,int>> v(n);
for(int i=0;i<n;i++){
v[i]={p[i+1],i+1};
}
sort(v.begin(),v.end());
for(int i=1;i<n;i++){
int a=v[i-1].second;
int b=v[i].second;
int w=min(p[a]%p[b],p[b]%p[a]);
e.push_back({a,b,w});
}
//-----------------------------------------
sort(e.begin(),e.end());
DSU d(n);
for(int i=1;i<=n;i++) d.make_set(i);
long long total=0;
int dem=0;
for(auto [u,v,w]:e){
if(d.union_set(u,v)){
total+=w;
if(++dem==n-1) break;
}
}
cout<<total;
}
# | 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... |