제출 #412669

#제출 시각아이디문제언어결과실행 시간메모리
412669A_D낙하산 고리들 (IOI12_rings)C++14
20 / 100
4088 ms41484 KiB

#include <bits/stdc++.h>

using namespace std;

int n;
const int N=1e6+100;
bool vis[N];
vector<int> g[N];
int ret;
int siz(int u,int p){
    int ret=0;
    for(auto x:g[u]){
        if(x==p)continue;
        ret++;
    }
    return ret;
}
void dfs(int u,int p,int me)
{
    vis[u]=1;
//    cout<<" u "<<u<<" "<<siz(u,me)<<endl;
    if(siz(u,me)>2){
        ret=0;
    }
    for(auto x:g[u]){
  //      cout<<" x "<<x<<" "<<siz(x,me)<<" "<<vis[x]<<" "<<me<<" "<<p<<endl;
        if(x==p||x==me)continue;
        if(vis[x]){
            ret=0;
            return;
        }
        dfs(x,u,me);
    }
}
int ok(int u)
{
    memset(vis,0,sizeof(vis));
    vis[u]=1;
    ret=1;
    for(int i=0;i<n;i++){
        int sz=siz(i,u);
        if(vis[i]==0&&sz<=1){
            dfs(i,i,u);
        }
    }
    for(int i=0;i<n;i++){
        if(vis[i]==0){
            ret=0;
        }
    }
    return ret;
}

void Init(int N_) {
    n = N_;
}

void Link(int a, int b){
    g[a].push_back(b);
    g[b].push_back(a);
}

int CountCritical() {
    int ans=0;
    for(int i=0;i<n;i++){
        ans+=ok(i);
    //    return ans;
    }
    return ans;
}


#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...