Submission #1245910

#TimeUsernameProblemLanguageResultExecution timeMemory
1245910nhatquangSirni (COCI17_sirni)C++20
140 / 140
3962 ms434720 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...