P3367

題目:
https://www.luogu.com.cn/problem/P3367

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <bits/stdc++.h>
#define MAXN 200005
using namespace std;

int n, m;
vector<int> f(MAXN);

int find(int x){
if(f[x] == x) return x;
return f[x] = find(f[x]);
}

bool isSameSet(int x, int y){
return (find(f[x]) == find(f[y]));
}

void Union(int x, int y){
f[find(x)] = find(y);
}

int main(){
cin >> n >> m;
int op, x, y;

for(int i=1; i<=n; ++i){
f[i] = i;
}

while(m--){
cin >> op >> x >> y;
if(op == 1){
Union(x, y);
}
else{
if(isSameSet(x, y)) printf("Y\n");
else printf("N\n");
}
}
return 0;
}