def__init__(self, n) -> None: ''' 初始化数据结构 ''' # 初始化连通分量数量 self._count = n # 初始化双亲节点 self._parent = [i for i inrange(n)] # self.size[x]表示以x为根节点的节点数量 self._size = [1for i inrange(n)] pass
deffind(self, x : int): ''' find root of x ''' while self._parent[x] != x: # 路经压缩,将当前节点的双亲节点设为其双亲节点的双亲节点 self._parent[x] = self._parent[self._parent[x]] x = self._parent[x] return x
defunion(self, p: int, q: int): ''' union p and q ''' # 找到p和q的根节点 rootP = self.find(p) rootQ = self.find(q) if rootP == rootQ: # 如果根节点相等,则pq本就联通 return # 将小集合合并到大集合中,平衡性优化 if self._size[rootP] > self._size[rootQ]: