考点:连通集的个数
#include<cstdio>
#include<vector>
#include<cstring>
using namespace std;
const int maxn=1010;
const int INF=1000000000;
int N, M, K;
int d[maxn][maxn], visit[maxn];
vector<int>G[maxn];
int query;
void dfs(int index){
if(index==query)return;
visit[index]=1;
for(int i=0; i<G[index].size(); i++){
int v=G[index][i];
if(visit[v]==0){
dfs(v);
}
}
}
int main(){
int a, b;
scanf("%d%d%d", &N, &M, &K);
for(int i=0; i<M; i++){
scanf("%d%d", &a, &b);
G[a].push_back(b);
G[b].push_back(a);
}
for(int i=0; i<K; i++){
int cnt=0;
scanf("%d", &query);
memset(visit, 0, sizeof(visit));
for(int j=1; j<=N; j++){
if(visit[j]==0&&j!=query){
dfs(j);
cnt++;
}
}
printf("%d\n", cnt-1);
}
return 0;
}
该题需要修的道路数是连通集的个数-1