AcWing 836. python版本的并查集:合并集合
原题链接
简单
作者:
顾_9
,
2025-01-06 23:19:57
,
所有人可见
,
阅读 2
- 为啥python版本的并查集会报错?
Python 使用 C 实现,函数调用会占用系统的调用栈(call stack)。每次递归调用会消耗栈空间,而栈空间是有限的。如果递归深度过大,可能会耗尽栈空间,导致程序崩溃。
- 怎么避免?
用迭代替换递归。
- 怎么采用路径压缩?
先找到root,路径上的值更新root, 走两遍
MAX_LENGTH = 100010
p = [i for i in range(MAX_LENGTH)]
def find(x):
t, f = x, p[x]
while f != t:
t = f
f = p[t]
i, f = x, p[x]
while f != i:
p[i] = t
i = f
f = p[i]
return t
def find_v2(x):
if p[x] != x:
p[x] = find(p[x])
return p[x]
if __name__ == '__main__':
n, m = map(int, input().split())
for _ in range(m):
op, i, j = input().split()
if op == 'M':
ii, jj = int(i), int(j)
p[find(ii)] = find(jj)
elif op == 'Q':
ii, jj = int(i), int(j)
print('Yes' if find(ii) == find(jj) else 'No')