제출 #1150112

#제출 시각아이디문제언어결과실행 시간메모리
1150112enzy낙하산 고리들 (IOI12_rings)C++20
0 / 100
262 ms51892 KiB
#include<bits/stdc++.h> using namespace std; const int maxn=1e6+10; int n, resp, qtd3, viz[maxn], eh[maxn], pai[maxn], ciclo, qm, qm3, best, idbest; vector<int>v[maxn]; bool ja=false; void merge(int a, int b){ pai[b]=a; } int find(int a){ if(pai[a]==a) return a; return pai[a]=find(pai[a]); } void Init(int N_){ resp = n = N_; for(int i=0;i<n;i++) pai[i]=i; } void Link(int a, int b){ v[a].push_back(b); v[b].push_back(a); int na=find(a), nb=find(b); if(na==nb){ if(na!=qm) ciclo++; qm=na; } if(na!=nb) merge(na,nb); if(v[a].size()>best){ best=v[a].size(); idbest=find(a); } if(v[b].size()>best){ best=v[b].size(); idbest=find(b); } if(v[a].size()>=4){ if(ja) resp=0; else if(qtd3==viz[a]+eh[a]) resp=1; // tem o proprio a ja=true; } if(v[b].size()>=4){ if(ja) resp=0; else if(qtd3==viz[b]+eh[b]) resp=1; // tem o proprio b ja=true; } if(v[a].size()==3){ qm3=find(a); qtd3++; eh[a]++; int at=0; if(qtd3==viz[a]+eh[a]) at++; for(int i : v[a]){ viz[i]++; if(viz[i]+eh[i]==qtd3) at++; } resp=at; } if(v[b].size()==3){ qtd3++; eh[b]++; int at=0; if(qtd3==viz[b]+eh[b]) at++; for(int i : v[b]){ viz[i]++; if(viz[i]+eh[i]==qtd3) at++; } resp=at; } if(ciclo>=2) resp=0; if(ciclo&&best-2<qtd3-1) resp=0; } int CountCritical(){ return resp; }
#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...