本题第一写即AC
题意
给出一个图,给若干次询问,每次询问提供一个城市序号,输出与该城市相连的道路全都断掉之后,剩下的点全部联通需要增加的道路数量
思路
邻接表建图,在不计入被删点所连道路的基础上DFS遍历这个图计算连通分量,连通分量数-1即为需要增加的道路数目。
注意点
DFS时注意标记visit为true的不要再dfs
AC代码
#include<iostream>
#include<vector>
#include <algorithm>
using namespace std;
vector <int> e[1000];
bool visit[1000];
int n,m,k;
int a,b;
int x;
void dfs(int index){
visit[index] = true;
for(int i=0;i<e[index].size();i++){
if(e[index][i]==x) continue;
if(visit[e[index][i]]==false)
dfs(e[index][i]);
}
}
int main(){
scanf("%d %d %d",&n,&m,&k);
for(int i=0;i<m;i++){
scanf("%d %d",&a,&b);
e[a].push_back(b);
e[b].push_back(a);
}
for(int i=0;i<k;i++){
fill(visit,visit+1000,false);
int cnt=0;
scanf("%d",&x);
for(int j=1;j<=n;j++){
if(j==x||visit[j]!=false) continue;
else {dfs(j);cnt++;}
}
printf("%d\n",cnt-1);
}
return 0;
}