#include <bits/stdc++.h>
using namespace std;
struct dsu
{
vector<int> par;
void make(int n)
{
par.resize(n+4);
for(int i=0;i<n;i++)
par[i]=i;
}
int fs(int u)
{
return (par[u]==u) ? u : par[u]=fs(par[u]);
}
bool uns(int u,int v)
{
u=fs(u),v=fs(v);
if(u==v) return false;
par[v]=u;
return true;
}
};
struct edge
{
int a,b,w;
};
int n,nx[10000004];
vector<edge> e;
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
//freopen(".inp", "r", stdin);
//freopen(".out", "w", stdout);
cin>>n;
dsu g;
g.make(n);
vector<int> p;
for(int x,i=1;i<=n;i++) cin>>x,p.push_back(x);
sort(p.begin(),p.end());
p.erase(unique(p.begin(),p.end()),p.end());
n=p.size()-1;
for(int i=0;i<n;i++)
{
nx[p[i]]=i;
for(int j=p[i]+1;j<=p[i+1];j++)
nx[j]=i+1;
}
for(int i=0;i<n;i++)
{
e.push_back({i,nx[p[i]+1],p[nx[p[i]+1]]%p[i]});
for(int k=p[i]*2;k<=p[n];k+=p[i])
{
e.push_back({i,nx[k],p[nx[k]]%p[i]});
k=p[nx[k]]/p[i]*p[i];
}
}
sort(e.begin(),e.end(),[&](edge u,edge v){
return u.w<v.w;
});
int ans=0;
for(auto x:e)
{
if(!g.uns(x.a,x.b)) continue;
ans+=x.w;
}
cout<<ans;
}
# | 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... |