链接
题目描述
有n个元素,你需要完成集合的合并和判断两个元素是否在同一集合中这两种操作。
样例输入
4 7
2 1 2
1 1 2
2 1 2
1 3 4
2 1 4
1 2 3
2 1 4
样例输出
N
Y
N
Y
思路
并查集模板,也没啥好说的
代码
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int fa[10005], n, m;
int find(int x) {
if (fa[x] == x)
return x;
return fa[x] = find(fa[x]);
}
void connect(int x, int y) {
int xx = find(x), yy = find(y);
if (xx != yy)
fa[xx] = yy;
return;
}//合并集合
int main() {
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; ++i) fa[i] = i;
for (int i = 1; i <= m; ++i) {
int z, x, y;
scanf("%d%d%d", &z, &x, &y);
if (z == 1)
connect(x, y);
else {
if (find(x) == find(y))
printf("Y\n");
else
printf("N\n");
}
}
return 0;
}