并查集的知识点可以看:算法学习笔记(1) : 并查集 - 知乎 (zhihu.com)
下面是自己实现的python版并查集模板
"""
描述:并查集(UnionFind)模板 pyhon代码
创建日期:2021/2/15
更新日期:2021/8/17
"""
class UnionFind:
def init(self, items):
fa, rank = {
}, {
}
for i in items:
fa[i] = i
rank[i] = 1
def find(self, fa, i):
# 查找 & 路径压缩
if fa[i] != i:
fa[i] = self.find(fa, fa[i])
return fa[i]
def merge(self, fa, rank, i, j):
# 按秩合并
fa_i, fa_j = self.find(fa, i), self.find(fa, j)
if rank[fa_i] < rank[fa_j]:
fa[fa_i] = fa[fa_j]
else:
fa[fa_j] = fa[fa_i]
if rank[fa_i] == rank[fa_j] and fa_i != fa_j:
rank[fa_i] += 1
上次修改:2021-08-17