Submission #1139325

#TimeUsernameProblemLanguageResultExecution timeMemory
1139325ChottuFSirni (COCI17_sirni)C++20
0 / 140
11 ms3648 KiB
#include <bits/stdc++.h> using namespace std; struct DSU { vector<int> p, sz; int c; DSU(int n):p(n),sz(n,1),c(n){ for(int i=0;i<n;i++)p[i]=i; } int f(int x){return p[x]==x?x:p[x]=f(p[x]);} bool u(int a,int b){ a=f(a);b=f(b); if(a==b)return false; if(sz[a]<sz[b])swap(a,b); p[b]=a;sz[a]+=sz[b];c--;return true; } }; int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); int N;cin>>N;vector<long long> A(N);for(int i=0;i<N;i++)cin>>A[i]; static vector<int> idx[100001];for(int i=0;i<=100000;i++)idx[i].clear(); long long mx=0;for(int i=0;i<N;i++){mx=max(mx,A[i]);idx[A[i]].push_back(i);} DSU dsu(N); for(int v=0;v<=100000;v++){ if(idx[v].size()>1){ for(int j=1;j<(int)idx[v].size();j++){ dsu.u(idx[v][0],idx[v][j]); } } } vector<int> rep(100001,-1); for(int v=0;v<=100000;v++){ if(!idx[v].empty())rep[v]=idx[v][0]; } vector<long long> distinct; for(int v=0;v<=mx;v++){ if(rep[v]!=-1)distinct.push_back(v); } vector<array<long long,3>> edges; auto addE=[&](long long x,long long y){ if(x==y)return; long long c1=x%y,c2=y%x;edges.push_back({min(c1,c2),rep[x],rep[y]}); }; sort(distinct.begin(),distinct.end()); for(long long x:distinct){ if(x==0)continue; for(long long m=x;m<=mx;m+=x){ auto it=lower_bound(distinct.begin(),distinct.end(),m); if(it!=distinct.begin())addE(x,*(it-1)); if(it!=distinct.end())addE(x,*it); } } sort(edges.begin(),edges.end(),[&](auto&a,auto&b){return a[0]<b[0];}); long long ans=0; for(auto&e:edges){ if(dsu.u(e[1],e[2])){ans+=e[0];if(dsu.c==1)break;} } cout<<ans<<"\n"; return 0; }
#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...