UnionFind:快查连通图
数组简单实现
class UF:
def __init__(self, n):
self.parent = [x for x in range(n)]
self.count = n
def find(self, p):
while self.parent[p]!=p:
p = self.parent[p]
return p
def union(self, p, q):
rootp, rootq = self.find(p), self.find(q)
if rootp==rootq: return
self.parent[rootp] = rootq
self.count -= 1
def connected(self, p, q):
return self.find(p)==self.find(q)路径压缩 / 小树接大树
带权重的UnionFind
例题:快速除法
Last updated