洛谷
#include<bits/stdc++.h>
using namespace std;
const int N = 1e6 + 7;
int fa[N];
int n, m;
int find(int x) {if(fa[x] == x) return x;return fa[x] = find(fa[x]);
}
void unionset(int x, int y) {fa[find(x)] = find(y);
}
int main() {cin >> n >> m;for(int i = 1; i <= n; i++) {fa[i] = i;}while(m--) {int x, a, b;cin >> x >> a >> b;if(x == 1) {unionset(a, b);}else{a = find(a), b = find(b);if(a == b) cout << "Y\n";else cout << "N\n";}}return 0;
}
查找x的父节点
int find(int x) {if(fa[x] == x) return x;return fa[x] = find(fa[x]);//路径压缩
}
合并
void unionset(int x, int y) {fa[find(x)] = find(y);
}