1.定义
并查集是一种数据结构 ,用于处理一些不交集的合并及查询问题。涉及到比如:关系,连通等问题是会用到。
2.方法
- 初始化
- 找祖先
- 合并
3.例子
蓝桥杯python组,蓝桥幼儿园
输入描述
第 11 行包含两个正整数 N,M,其中 N 表示蓝桥幼儿园的学生数量,学生的编号分别为 1∼N。之后的第 2∼M+1 行每行输入三个整数,op,x,y:
- 如果 op=1,表示小明用红绳连接了学生 x 和学生 y 。
- 如果 2op=2,请你回答小明学生 x 和 学生 y 是否为朋友。
1≤N,M≤2×105,1≤x,y≤N。
输出描述
对于每个 op=2 的输入,如果 x 和 y 是朋友,则输出一行 YES
,否则输出一行 NO
。
输入输出样例
示例 1
输入
5 5
2 1 2
1 1 3
2 1 3
1 2 3
2 1 2
输出
NO
YES
YES
N,M = map(int,input().split())
s = [i for i in range(N+1)]
def ancestor(x):
if x != s[x]:
s[x]=ancestor(s[x])
return s[x]
def merge(x,y):
x = ancestor(x)
y = ancestor(y)
if x != y:
s[x] = s[y]
for i in range(N):
op, x, y = map(int, input().split())
if op == 1:
merge(x,y)
if op == 2:
if ancestor(x) == ancestor(y):
print('YES')
else:
print('NO')