文档讲解:
并查集主要有两个功能:将两个元素添加到一个集合中,判断两个元素是否在同一个集合中。空间复杂度为 O ( n ) O(n) O(n),路径压缩后的并查集时间复杂度在 O ( l o g n ) O(logn) O(logn) 与 O ( 1 ) O(1) O(1) 之间,且随着查询或者合并操作的增加,会越来越趋于 O ( 1 ) O(1) O(1)。
题目链接:
文档讲解:
#定义寻根函数
def find(u):
if father[u] == u:
return u
else:
#路径压缩
father[u] = find(father[u])
return father[u]
#判断u和v是否同根
def issame(u,v):
u = find(u)
v = find(v)
return u == v
#将v -> u 这条边加入并查集
def joinside(u,v):
u = find(u)
v = find(v)
if u == v:
return
father[v] = u
n,m = map(int,input().split())
father = [0] * (n+1)
#并查集初始化
for i in range(n+1):
father[i] = i
for _ in range(m):
s,t = map(int,input().split())
joinside(s,t)
source,destination = map(int,input().split())
res = issame(source,destination)
if res:
print(1)
else:
print(0)