判断图是否有回路的方法:dfs,拓扑排序
①删除结点并不一定真的要删除它,只要在dfs时当它不存在即可
②要将不连通的图变为连通图,并查集中学习到只需增加一条边即可。总共需要增加的边等于各个连通图个数-1.
#include<bits/stdc++.h>
using namespace std;
const int N=1010;
vector<int> G[N];
bool vis[N];
int nowdelete;
void dfs(int v){
if(v==nowdelete) return;
vis[v]=true;
for(int i=0;i<G[v].size();i++){
if(vis[G[v][i]]==false)
dfs(G[v][i]);
}
}
int n,m,k;
int main(){
cin>>n>>m>>k;
for(int i=0;i<m;i++){
int a,b;
cin>>a>>b;
G[a].push_back(b);
G[b].push_back(a);
}
for(int query=0;query<k;query++){
cin>>nowdelete;
memset(vis,false,sizeof(vis));
int block=0;
for(int i=1;i<=n;i++){
if(i!=nowdelete&&vis[i]==false)
{
dfs(i);
block++;
}
}
cout<<block-1<<endl;
}
return 0;
}