Friday, November 9, 2012

Articulation Point


#include <iostream>
#include <cstdio>
#include <vector>
#include <cstring>
#include <string>
using namespace std;
#define siz 105
vector <int> vec[siz];
bool color[siz];
int N,E;

void reset(){
    for(int i=0;i<=N;i++){
        color[i]=false;
        vec[i].clear();
    }
}

void dfs(int n, int off){
    color[n]=true;
    for(int i=0;i<vec[n].size();i++){
        int v=vec[n][i];
        if(color[v]==false&&v!=off){
            dfs(v,off);
        }
    }
}

int criticalCheck(int off){
    for(int i=1;i<=N;i++){
        if(color[i]==false&&i!=off){
            return 1;
        }
    }
    return 0;
}

int main()
{

    int u,v;
    //freopen("input.txt","r",stdin);
    while(scanf("%d%d",&N,&E)==2){
        reset();
        for(int i=0;i<E;i++){
            scanf("%d%d",&u,&v);
            vec[u].push_back(v);
            vec[v].push_back(u);
        }

        int res=0;
        memset(color,false,sizeof(color));
        dfs(2,1);
        res+=criticalCheck(1);
        for(int i=2;i<=N;i++){
            memset(color,false,sizeof(color));
            dfs(1,i);
            res+=criticalCheck(i);
        }
        cout<<res<<endl;

    }
    return 0;
}


No comments:

Post a Comment