Submission #18802

#TimeUsernameProblemLanguageResultExecution timeMemory
18802ggohParachute rings (IOI12_rings)C++98
100 / 100
2365 ms71344 KiB
#include<cstdio> #include<algorithm> int p,q,a,cyc,t,co[5],link[1000003][2],par[5][1000002],deg[5][1000002],cycsz,sz[1000002],rank[5][1000002]; bool overtwo,check[5]; int find(int num,int AA){if(AA==par[num][AA])return AA;else return par[num][AA]=find(num,par[num][AA]);} void unite(int num,int AA,int BB) { AA=find(num,AA);BB=find(num,BB); if(rank[num][AA]<rank[num][BB])par[num][AA]=BB; else { if(rank[num][AA]==rank[num][BB])rank[num][AA]++; par[num][BB]=AA; } } void add(int r,int s) { for(int i=1;i<=4;i++) { if(check[i]==0)continue; if(co[i]==r||co[i]==s)continue; deg[i][r]++;deg[i][s]++; if(deg[i][r]>=3||deg[i][s]>=3){check[i]=0;continue;} int rr=find(i,r),ss=find(i,s); if(rr==ss)check[i]=0; else { unite(i,rr,ss); } } } void make(int r) { int u=1; co[u++]=r; for(int i=0;i<t;i++) { if(link[i][0]==r)co[u++]=link[i][1]; else if(link[i][1]==r)co[u++]=link[i][0]; } for(int i=1;i<=4;i++) { check[i]=1; for(int j=0;j<a;j++)par[i][j]=j,rank[i][j]=1; } for(int i=0;i<t;i++)add(link[i][0],link[i][1]); } void Init(int N) { a=N; for(int i=0;i<N;i++)rank[0][i]=1,par[0][i]=i,sz[i]=1; } void Link(int A, int B) { if(cyc>1)return ; p=A;q=B; link[t][0]=p;link[t][1]=q;t++; deg[0][p]++;deg[0][q]++; if(deg[0][p]==3&&overtwo==0){ overtwo=1; make(p); } else if(overtwo==0&&deg[0][q]==3) { overtwo=1; make(q); } else if(overtwo==0) { p=find(0,p);q=find(0,q); if(p==q){cyc++;cycsz=sz[p];} else { unite(0,p,q); sz[p]+=sz[q]; sz[q]=sz[p]; } } else { add(p,q); } } int CountCritical() { if(cyc>1)return 0; if(overtwo) { int ans=0; for(int i=1;i<=4;i++)ans+=check[i]; return ans; } else { if(cyc)return cycsz; else return a; } }
#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...