제출 #856350

#제출 시각아이디문제언어결과실행 시간메모리
856350vjudge1Sirni (COCI17_sirni)C++17
98 / 140
5075 ms440156 KiB
#ifndef Local #pragma GCC optimize("O3,unroll-loops") #pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt") #endif #include <bits/stdc++.h> //#define int long long #define pb push_back #define lim 100000 using namespace std; const int mod=1000000007ll; unordered_map<int,int>parent; int find(int i){ if(parent[i]==i)return i; return parent[i]=find(parent[i]); } bool unite(int i,int j){ int x=find(i),y=find(j); if(x!=y){ parent[x]=y; return 1; } return 0; } int mody(int i,int j){ return max(i,j)%min(i,j); } signed main(){ ios_base::sync_with_stdio(false); cin.tie(NULL);cout.tie(NULL); #ifdef Local freopen("in.txt","r",stdin); freopen("out.txt","w",stdout); #endif int n; cin>>n; int a[n]; for(int i=0;i<n;i++){ cin>>a[i]; } sort(a,a+n); n=unique(a,a+n)-a; for(int i=0;i<n;i++)parent[a[i]]=a[i]; int now[a[n-1]+1]; memset(now,0,sizeof(now)); for(int i=0;i<n;i++){ now[a[i]]=a[i]; } int last=-1; for(int i=a[n-1];i;i--){ if(!now[i]){ now[i]=last; }else last=now[i]; } #define tup tuple<int,int,int> priority_queue<tup,vector<tup>,greater<tup>>q; for(int i=0;i<n-1;i++){ int nexty=now[a[i]+1]; q.push({mody(a[i],nexty),a[i],nexty}); int last=nexty; for(int j=2;j*a[i]<=a[n-1];j++){ nexty=now[j*a[i]]; if(nexty!=last)q.push({mody(a[i],nexty),a[i],nexty}); last=nexty; } } int ans=0; while(q.size()){ auto [cost,i,j]=q.top(); q.pop(); if(unite(i,j)){ //cerr<<i<<" "<<j<<"\n"; ans+=cost; }//else cerr<<"didnt "<<i<<" "<<j<<" "<<find(i)<<" "<<find(j)<<"\n"; } cout<<ans<<"\n"; }
#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...