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