并查集拓展
由于上一期过水,只讲了一点点序列的问题,然而在乱逛看题解的时候,发现其实并查集能做到的远远不止图论与有限步骤序列问题,今天就从一(不会讲模板的)开始来记录一下并查集的美妙。
1.入门级别:P1196 [NOI2002] 银河英雄传说
这应该是最基础的运用,利用并查集来维护图的连通性,做一类合并问题。
这种题一般十分明显的需要用到并查集,大部分时候用并查集来辅助正解或来打暴力。
像这题……好像没什么好说的。(这题之前是蓝)
就正常维护就行了,真没什么好讲的。
2.入门进阶:P4616 [COCI2017-2018#5] Pictionary
只是留个练习题而已。
至于这题怎么做,把数小的作为父节点,然后用
在连边的时候用并查集判断两边是否连上,如果已连上再链接由于边权更大不会更优,所以最终形态是棵树。
复杂度:
3.一技能,化图为树:P3366 【模板】最小生成树(气氛逐渐中二起来)
这是利用定义去实现算法的第一种用法,把整张图拆开,再利用并查集去合并。
那么这题,没什么好说的吧……过。
4.一技能二段,spfa 附身(bushi):P4768 [NOI2018] 归程
通过并查集来维护生成树的
那么两点间的最小值明显就是
这道题就祥见另一个博客吧。
5.二技能,败者食尘:P3402 可持久化并查集
比较并查集是数据结构,特色还是得有。
这东西其实很好弄,只需要对操作建树,回退时在树节点上回退即可,这样复杂度是稳定
在线做法其实就跟可持久化数组一个概念,具体就不细讲了。
例题我是真没找些什么,所以一段技能就够了吧……
6.三技能,我是线段树???:P4145 上帝造题的七分钟 2 / 花神游历各国
这玩意是经典的线段树题目,应该学过线段树的都认识,但是为什么它有并查集标签呢。
这就是我在上个版本讲述的并查集处理序列问题。
这题我们可以先考虑一个暴力,那就是从
我们可以发现,一个数其实取根号的次数特别少,所以在一定操作后,序列中会有很多
那么这些
那么现在问题就是,我们怎么跳过一段全部为
我们就可以把所有为
7.三技能二段,我是平衡树!!!:P5610 [Ynoi2013] 大学
首先这题和上面那个题有个很相像的地方,就是数被除很少次就会变成
那么就有一个暴力的思路,建
这题与上题有个不同处,上一题你线段树可以卡过(然而其实是根本没卡),这题平衡树你就寄了。
上述复杂度:
那么就只能想办法优化了,根据刚刚分析,有很多数其实是不用枚举的,所以我们对于每一个数建若干个并查集来存储当前因数有哪些数没被枚举,然后枚举时直接跳过这些数就行了,当要删除这个点时,直接合并并查集即可。
但是由于这题过于毒瘤,要卡常,慎写。
8.奥义:分块赐予我力量!!!:P3247 [HNOI2016]最小公倍数
题意简述:
给定一个无向图,边权带两个值
这种题可以想到一个暴力,把所有
但是对于多组询问,如果每次这么做,复杂度是承受不下的。
我们可以发现,其实每次询问不需要把所有并查集撤销完全,所以我们想一些巧妙的方法,可以让并查集撤回次数变少。
我们先睡个觉
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现