class UnionFind(object):
"""并查集类"""
def __init__(self, n):
"""长度为n的并查集"""
self.uf = [-1 for i in range(n + 1)] # 列表0位置空出
self.sets_count = n # 判断并查集里集合的数量
def find(self, p):
"""查找p的根结点(祖先)"""
r = p
while self.uf[p] > 0:
p = self.uf[p]
while r != p:
self.uf[r], r = p, self.uf[r]
return p
def union(self, p, q):
"""连通p,q 让q指向p"""
proot = self.find(p)
qroot = self.fing(q)
if proot == qroot:
return
if self.uf[proot] > self.uf[qroot]:
self.uf[proot] = qroot
self.uf[qroot] += self.uf[proot]
else:
self.uf[qroot] = proot
self.uf[proot] += self.uf[qroot]
self.sets_count -= 1
def is_connected(self, p, q):
"""判断pq是否已经连通"""
if self.find(p) == self.find(q):
return True
else:
return False
更多优质资源在我的公众号“一个直男的救赎之路”:
公众号主要分享的知识包括:人工智能,计算机视觉,算法,编程语言学习(python,java,c/c++),大学生竞赛,学习方法心得,好书推荐等,欢迎您一起交流和学习。公众号也会经常分享一些优质资源和教学视频,电子书等。
回复以下内容,即可获取千G学习资源!
--------
算法
人工智能
python
C语言
蓝桥杯
--------