欢迎光临散文网 会员登陆 & 注册

并查集DUS

2023-04-11 12:36 作者:米诺斯人  | 我要投稿

并查集:把集合中元素的关系构造为一棵树;

路径压缩优化:在查询子节点的根的时候,压缩整个枝干到root,形成菊花树;

子树合并优化:在合并两棵树的时候,把深度小的树作为子树合到深度大的树上,合并后的树根深度++(注意排除树根相同的假合并)

两种优化一起使用:路径压缩时要保证root的深度更新


相比DFS或BFS,DUS的优点是在多次查询时,每次查询都可以优化以后查询的速度。对于每个分裂的连通图(树枝),仅第一次查询要遍历整条枝干,往后都是O(1)复杂度。

(洛谷P1551)亲戚

题目背景
若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出的两个人是否具有亲戚关系。
题目描述
规定:x和y是亲戚,y和z是亲戚,那么x和z也是亲戚。如果x,y是亲戚,那么x的亲戚都是y的亲戚,y的亲戚也都是x的亲戚。
输入格式
第一行:三个整数n,m,p,(n<=5000,m<=5000,p<=5000),分别表示有n个人,m个亲戚关系,询问p对亲戚关系。
以下m行:每行两个数Mi,Mj,1<=Mi,Mj<=N,表示Mi和Mj具有亲戚关系。
接下来p行:每行两个数Pi,Pj,询问Pi和Pj是否具有亲戚关系。
输出格式
P行,每行一个’Yes’或’No’。表示第i个询问的答案为“具有”或“不具有”亲戚关系。

本题中,如果用搜索算法,每次查询效率为O(n),而用并查集可以做到平均效率接近O(1)。


并查集DUS的评论 (共 条)

分享到微博请遵守国家法律