题意:给出城市个数为N,连接城市间的道路的条数为M,以及询问次数为K
然后输入这M条道路连接的两个端点城市的编号A和B
然后是K次询问,每次询问的方法是:给出一个编号为Q城市,然后将这个城市和与其相连的道路从网络中删除,要求让你求出添加多少条道路,才能使得被删除了编号为Q的城市的网络仍然联通
解法:dfs求联通分量个数,类似于之前入门深搜时学的求石油的贮藏数
#include<bits/stdc++.h>
using namespace std;
const int maxn=1005;
vector<int>G[maxn];
int n,m,k;
bool vis[maxn];
void dfs(int number) {
for(int i=0; i<G[number].size(); i++) {
if(!vis[G[number][i]]) {
vis[G[number][i]]=1;
dfs(G[number][i]);
}
}
}
int main() {
int city,a,b,c,cnt=0;
cin>>n>>m>>k;
while(m--) {
scanf("%d%d",&a,&b);
G[a].push_back(b);
G[b].push_back(a);
}
while(k--) {
memset(vis,0,sizeof(vis));
cnt=0;
scanf("%d",&city);
vis[city]=1;
for(int i=1; i<=n; i++) {
if(!vis[i]) {
dfs(i);
cnt++;
}
}
cout<<cnt-1<<endl;
}
return 0;
}
感悟:每天进步一点点