Submission #949288

#TimeUsernameProblemLanguageResultExecution timeMemory
949288BaytoroSirni (COCI17_sirni)C++17
0 / 140
264 ms109488 KiB
#include <bits/stdc++.h> using namespace std; #define ios ios::sync_with_stdio(false); cin.tie(NULL); #define pb push_back #define all(x) x.begin(), x.end() #define rall(x) x.rbegin(), x.rend() #define fr first #define sc second #define mp make_pair #define ll long long const ll INF=1e18,N=1e7+5,M=1e6+1; ll nxt[N],par[M]; int f(ll x){ if(par[x]==x) return x; return par[x]=f(par[x]); } bool add(ll a, ll b){ a=f(a),b=f(b); if(a==b) return 0; if(rand()%2) swap(a,b); par[a]=b; return 1; } void solve(){ int n;cin>>n; vector<ll> p(n); for(int i=0;i<n;i++) cin>>p[i]; sort(all(p)); ll mx=0; for(int i=0;i<n;i++){ nxt[p[i]]=i; mx=max(mx,p[i]); par[i]=i; } for(int i=0;i<=mx;i++) nxt[i]=-1; for(int i=mx;i>=0;i--){ if(nxt[i]==-1) nxt[i]=nxt[i+1]; } vector<pair<int,pair<int,int> > > a; for(int i=0;i<n;i++){ if(i<n-1 && p[i]==p[i+1]) continue; //g[p[i]].pb(make_pair(p[i+1],p[i+1]%p[i])); a.pb(mp(p[i+1]%p[i],mp(i,i+1))); for(int j=p[i]*2;j<=mx;j+=p[i]){ a.pb(mp(p[nxt[j]]%p[i],mp(i,nxt[j]))); //g[p[i]].pb(make_pair(nxt[j],nxt[j]%p[i])); } } sort(all(a)); ll ans=0; for(auto it: a){ //cerr<<it.sc.fr<<' '<<it.sc.sc<<' '<<it.fr<<' '; if(add(it.sc.fr,it.sc.sc)){ //cerr<<"<-"; ans+=it.fr; } //cerr<<endl; } cout<<ans<<endl; } int main(){ solve(); }
#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...