并查集错误点
未分清并查集中路径压缩时应该更新的节点,应注意每次更新集合时应更新祖先节点
#include <stdio.h>
#include <iostream>
using namespace std;
int n,m;
int f[10010];
int z,x,y;
int dfs(int x){
if(f[x] == x)return x;
return f[x]=dfs(f[x]);
}
int main(){
scanf("%d%d",&n,&m);
for(int i = 1;i <= n;i++)f[i]=i;
for(int i = 0;i < m;i++){
scanf("%d%d%d",&z,&x,&y);
if(z==1){
f[dfs(x)] = dfs(y);//此处是需要更新x的祖先的集合,而不是单独更新x的集合
//单独更新x的集合导致同一集合内的其他节点发生错误
}else{
if(dfs(x)==dfs(y))printf("Y\n");
else printf("N\n");
}
}
return 0;
}