Submission #949280

#TimeUsernameProblemLanguageResultExecution timeMemory
949280BaytoroSirni (COCI17_sirni)C++17
56 / 140
910 ms786432 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; ll nxt[N],par[N]; 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]]=p[i]; mx=max(mx,p[i]); par[p[i]]=p[i]; } for(int i=N-1;i>=0;i--){ if(nxt[i]==0) 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(p[i],p[i+1]))); for(int j=p[i]*2;j<=mx;j+=p[i]){ a.pb(mp(nxt[j]%p[i],mp(p[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){ if(add(it.sc.fr,it.sc.sc)){ ans+=it.fr; } } 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...