1144:Network

keyword

無向グラフ 関節点 BruteForce C++

概要

ノード数V(<100)の無向グラフが与えられるので、関節点の個数を出力する問題。
ノード数が少ないので全てのノードを取り除いて試す。計算量O(V*E)。

vector<int> graph[102];
bool visited[102];
int N;

void dfs(int v){
    visited[v] = true;
    for(int i=0; i<graph[v].size(); i++){
        int u = graph[v][i];
        if(!visited[u])
            dfs(u);
    }
}

int solve(){
    if(N<3) return 0;
    int ans = 0;
    for(int i=0; i<N; i++){
        memset(visited, 0, sizeof(visited));
        visited[i] = true;
        dfs(i?0:1);
        bool found = false;
        for(int j=0; j<N; j++)
            if(!visited[j]) found = true;
        if(found)
            ans++;
    }
    return ans;
}