并查集

模板

int n,m,z,x,y,fa[10010];
int find(int a){
	if(fa[a] == a) return a;
	return fa[a] = find(fa[a]);//路径压缩,把路过的点的fa都修改成终值
}
int main(){
	scanf("%d%d",&n,&m);
	for(int i = 1; i <= n; ++i) fa[i] = i;//初始化
	while(m--){
		scanf("%d%d%d",&z,&x,&y);
		if(z == 1) fa[find(x)] = find(y);//不能写成fa[x] = find(y),要把老大归到麾下,而不是只改变fa[x]
		else{
			if(find(x) == find(y)) puts("Y"); //不能写成fa[x] == fa[y],因为并不能确定fa[x]就是老大
			else puts("N");
		}
	}
	return 0;
}
posted @ 2024-10-23 08:46  弗阴  阅读(12)  评论(0)    收藏  举报