题解
本题的实质是,在一个连通分量中抹去一个点和他的所有边,要求你求出还至少需要多少条边能让整个图重新变成一个连通分量,也就是连通分量的个数-1;注意,每检测一个城市之前,需要对visit数组进行一次初始化。
代码
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
const int INF=1000000000;
vector<int> G[1010];
int m,n,k;
int d[1010][1010],visit[1010];
int query;
void dfs(int v){
if(v==query)
return;
visit[v]=1;
for(int i=0;i<G[v].size();i++){
int u=G[v][i];
if(visit[u]==0){
dfs(u);
}
}
}
int main()
{
int x,y;
cin>>n>>m>>k;
for(int i=0;i<m;i++){
cin>>x>>y;
G[x].push_back(y);
G[y].push_back(x);
}
for(int i=0;i<k;i++){
int sum=0;
cin>>query;
memset(visit,0,sizeof(visit));
for(int j=1;j<=n;j++){
if(visit[j]==0&&j!=query){
dfs(j);
sum++;
}
}
cout<<sum-1<<endl;
}
return 0;
}