并查集理论基础
- 并查集主要有两个功能:
- 将两个元素添加到一个集合中。
- 判断两个元素在不在同一个集合
- 复杂度分析
- 空间复杂度: O(n) ,申请一个father数组。
- 路径压缩后的并查集时间复杂度在O(logn)与O(1)之间,且随着查询或者合并操作的增加,时间复杂度会越来越趋于O(1)。
- 在第一次查询的时候,相当于是n叉树上从叶子节点到根节点的查询过程,时间复杂度是logn,但路径压缩后,后面的查询操作都是O(1),而 join 函数 和 isSame函数 里涉及的查询操作也是一样的过程。
寻找存在的路径
def init():
for i in range(n):
father[i]=i
def find(x):
return x if x==father[x] else find(father[x])
def join(x,y):
x=find(x)
y=find(y)
if x==y: return
father[x]=y
def isSame(x,y):
x=find(x)
y=find(y)
return True if x==y else False
if __name__=='__main__':
n,m = map(int, input().split())
father = [0]*n
init()
for _ in range(m):
a,b = map(int, input().split())
join(a-1,b-1)
s,d = map(int,input().split())
if isSame(s-1,d-1):
print(1)
else:
print(0)