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語言
藍橋杯
--------