当需要判断图是否为连通图时,可以使用并查集来进行连通分量的统计,若连通分量大于 1,则说明图中存在多个连通分量,图不为连通图。
int n,m;
int father[N];
int Find(int x){
if(father[x]==-1)
return x;
return father[x]=Find(father[x]);
}
void Union(int x,int y){
x=Find(x);
y=Find(y);
if(x!=y)
father[x]=y;
}
int main(){
memset(father,-1,sizeof(father));
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++){
int x,y;
scanf("%d%d",&x,&y);
Union(x,y);
}
int cnt=0;//记录连通分量
for(int i=1;i<=n;i++)
if(Find(i)==i)
cnt++;
printf("%d\n",cnt);
return 0;
}