P1551. 亲戚

考点

  • 并查集

题解

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>
using namespace std;
const int LEN = 5050;
int fa[LEN];

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

void join(int a, int b)
{
int f1 = find(a), f2 = find(b);
if (f1 != f2)
fa[f1] = f2;
}

int main()
{
int n, m, p, a, b;
cin >> n >> m >> p;
for (int i = 1; i <= n; ++i)
fa[i] = i;
while (m--)
{
cin >> a >> b;
join(a, b);
}
while (p--)
{
cin >> a >> b;
if (find(a) != find(b))
cout << "No" << endl;
else
cout << "Yes" << endl;
}
return 0;
}

思路

并查集的模板题,我觉得《深基》讲得还是很透彻的,直接上图