代码部分:
class UnionFind():
is_root = [] #是否为根
father = [] #father[k] = value 保存k的父亲节点
def __init__(self, n):
#为方便编写,数组下标从1开始,占用列表的零下标
self.isRoot.append(0)
self.father.append(True)
for i in range(1, n+1):
self.is_root.append(False) #初始化不为其他节点的根节点
self.father.append(i) #初始自己为自己的父亲
#递归查找n的父亲节点
def find(self, n):
if self.father[n]==n:
return n
else:
return self.find(self.father[n])
#合并操作 优化可以使用:路径压缩
def union(self, a, b):
Fa = self.find(a)
Fb = self.find(b)
if Fa!=Fb:
self.father[Fa] = Fb