一、题目概述&样例
略
二、思路
即求一个无向图中, 去掉一个顶点即与该顶点相连的边后,所剩余连通分量个数,且有N个连通分量时至少N-1条边可使其成为连通图
三、代码
#include <cstdio>
#include <vector>
using namespace std;
vector<bool> visited(1000);
vector<vector<int>> G(1000);
void DFS( int v )
{
visited[v] = 1;
for( int i = 0; i < G[v].size(); ++i )
if( !visited[ G[v][i] ] )
DFS( G[v][i] );
}
int main()
{
int N, M, K;
scanf("%d %d %d", &N, &M, &K);
for( int i = 0, c1, c2; i < M; ++i )
{
scanf("%d %d", &c1, &c2);
G[c1].push_back(c2);
G[c2].push_back(c1);
}
for( int i = 0, c, cnt; i < K; ++i )
{
scanf("%d", &c);
fill( visited.begin(), visited.end(), 0 );
visited[c] = 1;
cnt = 0;
for( int i = 1; i <= N; ++i )
if( !visited[i] )
{
++cnt;
DFS(i);
}
printf("%d\n", cnt - 1);
}
}