并查集升级版
并查集升级版
主要讲解内容:加权并查集,扩展域并查集(种类并查集)
例题及根据题目的不同更细节的讲解整合在这里
加权并查集
并查集实际上是由许多颗树组成的除了记录集合的包含关系之外,我们还可以添加更多数组以保存更多信息。
就比如,我们可以附加一个\(dis[]\)数组来保存每个节点到他的父亲的权值,每次路径压缩都顺手把这根枝条上的边权整合起来。
这样我们就维护了一个边权数组,保存了每个节点到树根的一些信息,这就是加权并查集
扩展域并查集
又称种类并查集
并查集的一大特点就是能保存关系的传递性,比如朋友的朋友是朋友,但有的时候还会出现敌人的敌人是朋友这种关系。对于这种关系,一般的并查集就难以维护了,所以就要用到扩展域并查集。
对于\(n\)个人中的一个人\(i\),我们可以把\(i\)所在的集合定义为\(i\)的朋友域,把\(i+n\)所在的集合定义为\(i\)的敌人域。
这样当给出两个人\(i,j\)时:
- 如果他们是朋友,而且根据题目我们可以推断出“朋友的朋友是朋友”那么我们就可以把\(i,j\)所在的集合合并
- 如果他们是敌人,而且根据题目我们可以推断出“敌人的朋友是敌人”那么我们就可以把\(i,j+n\)和\(i+n,j\)所在集合分别合并
实际做题中肯定不止这几种传递性关系,不光朋友关系(敌人域、朋友域),奇偶性(奇数域、偶数域)啦,捕食关系(猎物域、同类域、捕食域)啦这些可以分成不同域的带有传递性的都可以使用扩展域并查集
最后,算法思路不难,但真正难的是把思路转换成代码以及算法在程序中的具体实现,例题解析请关注这个文章
时间仓促,如有错误欢迎指出,欢迎在评论区讨论,如对您有帮助还请点个推荐、关注支持一下
作者:博客园 - 某谦
出处:https://www.cnblogs.com/lmq742643
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文链接,否则保留追究法律责任的权利。
若内容有侵犯您权益的地方,请公告栏处联系本人,本人定积极配合处理解决。