Submission #581198

#TimeUsernameProblemLanguageResultExecution timeMemory
581198andrei_boacaICC (CEOI16_icc)C++14
100 / 100
136 ms632 KiB
#include <bits/stdc++.h> #include "icc.h" using namespace std; mt19937 rng(time(NULL)); int n; vector<int> dsu[105]; int comp[105],a[105],b[105],asize,bsize,A[105]; int comps[105][105],vals[105]; void dsu_merge(int c1,int c2) { if(dsu[c1].size()<dsu[c2].size()) swap(c1,c2); for(int i:dsu[c2]) { comp[i]=c1; dsu[c1].push_back(i); } dsu[c2].clear(); } int adj[105][105]; /*int query(int asize,int bsize, int v[105],int w[105]) { for(int i=0;i<asize;i++) for(int j=0;j<bsize;j++) if(adj[v[i]][w[j]]) return 1; return 0; } void setRoad(int x,int y) { cout<<x<<' '<<y<<'\n'; adj[x][y]=adj[y][x]=1; }*/ void run(int N) { n=N; for(int i=1;i<=n;i++) { dsu[i].push_back(i); comp[i]=i; } int nr=n; for(int z=1;z<n;z++,nr--) { int cnt=0; /*int h,e; cin>>h>>e; adj[h][e]=adj[e][h]=1;*/ for(int i=1;i<=n;i++) if(dsu[i].size()) { cnt++; for(int j:dsu[i]) comp[j]=cnt; dsu[cnt]=dsu[i]; if(i!=cnt) dsu[i].clear(); } int bitlim=0; for(int i=1;i<=cnt;i++) { vals[i]=i; for(int bit=0;bit<7;bit++) if((i>>bit)&1) bitlim=max(bitlim,bit); } for(int bit=0;bit<=bitlim;bit++) { asize=0,bsize=0; for(int i=1;i<=cnt;i++) { if((i>>bit)&1) { for(int j:dsu[i]) a[asize++]=j; } else { for(int j:dsu[i]) b[bsize++]=j; } } if(bit==bitlim||query(asize,bsize,a,b)) break; } int st=0; int dr=asize-1; int x=0; while(st<=dr) { int mij=(st+dr)/2; int sza=0; for(int i=0;i<=mij;i++) A[sza++]=a[i]; int ans=query(sza,bsize,A,b); if(ans==1) { x=a[mij]; dr=mij-1; } else st=mij+1; } st=0; dr=bsize-1; int y=0; while(st<=dr) { int mij=(st+dr)/2; int sza=0; for(int i=0;i<=mij;i++) A[sza++]=b[i]; int ans=query(sza,asize,A,a); if(ans==1) { y=b[mij]; dr=mij-1; } else st=mij+1; } dsu_merge(comp[x],comp[y]); setRoad(x,y); } } /*int main() { int N; cin>>N; run(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...