推广网站排行榜,网站备案和域名备案,wordpress菜单小工具,小程序个人开发全过程并查集理论基础
并查集主要有两个功能#xff1a; 将两个元素添加到一个集合中。判断两个元素在不在同一个集合 复杂度分析 空间复杂度#xff1a; O(n) #xff0c;申请一个father数组。路径压缩后的并查集时间复杂度在O(logn)与O(1)之间#xff0c;且随着查询或者合并操…并查集理论基础
并查集主要有两个功能 将两个元素添加到一个集合中。判断两个元素在不在同一个集合 复杂度分析 空间复杂度 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 xfather[x] else find(father[x])def join(x,y):xfind(x)yfind(y)if xy: returnfather[x]ydef isSame(x,y):xfind(x)yfind(y)return True if xy 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)