并查集
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;
}

浙公网安备 33010602011771号