a和b打架打输了,b做老大,f[a]=b
a和c打架打输了,c做老大,f[a]=c,b的老大也变成了c,f[b]=c
以上是合并
查询就直接找彼此的老大判断是否相同就可以
#include<iostream>
#include<cstdlib>
#include<cstdio>
using namespace std;
const int maxn = 1e4 + 5;
int f[maxn];
int n, m, z, x, y;
int find(int x) {
if (f[x] == x)
return x;
return f[x] = find(f[x]);
}
int main() {
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; i++)
f[i] = i;
while (m--) {
scanf("%d%d%d", &z, &x, &y);
if (z == 1)
f[find(x)] = find(y);
else
if (find(x) == find(y))
printf("Y\n");
else
printf("N\n");
}
//system("pause");
return 0;
}