本题不能用并查集?
查看原帖
本题不能用并查集?
556362
qwq___qaq楼主2021/9/18 21:39
#include<bits/stdc++.h>
using namespace std;
int n,m,father[100005],u,v,ans;
void makeSet(int n){
	for(int i=1;i<=n;i++)
		father[i]=i;
}
int findSet(int x){
	if(father[x]==x)
		return x;
	else
		return father[x]=findSet(father[x]);
}
void unionSet(int a,int b){
	int x=findSet(a),y=findSet(b);
	if(x!=y)
		father[x]=y;
}
int main(){
	scanf("%d%d",&n,&m);
	makeSet(n);
	while(m--){
        scanf("%d%d",&u,&v);
        unionSet(u,v);
	}
	for(int i=1;i<=n;i++)
		ans+=(father[i]==i);
	printf("%d\n",ans);
	return 0;
}
2021/9/18 21:39
加载中...