제출 #1150111

#제출 시각아이디문제언어결과실행 시간메모리
1150111enzyParachute rings (IOI12_rings)C++20
0 / 100
265 ms51868 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; 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(ciclo){ if(na!=qm) ciclo++; }else{ ciclo++; qm=na; } } if(na!=nb) merge(na,nb); if(v[a].size()>=4){ if(ja) resp=0; else if(qtd3==viz[a]+1) resp=1; // tem o proprio a ja=true; } if(v[b].size()>=4){ if(ja) resp=0; else if(qtd3==viz[b]+1) resp=1; // tem o proprio b ja=true; } set<int>used; 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]++; used.insert(i); if(viz[i]+eh[i]==qtd3) at++; } resp=at; if(qtd3>=3) resp=0; } if(v[b].size()==3){ qtd3++; eh[b]++; int at=0; if(qtd3==viz[b]+eh[b]) at++; for(int i : v[b]){ if(used.count(i)) continue; viz[i]++; if(viz[i]+eh[i]==qtd3) at++; } resp=at; if(qtd3>=3) resp=0; } if((ciclo&&qtd3>=2)||ciclo>=2) resp=0; if(ciclo&&qtd3&&qm3!=qm) 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...