并查集拓展

上一期

由于上一期过水,只讲了一点点序列的问题,然而在乱逛看题解的时候,发现其实并查集能做到的远远不止图论与有限步骤序列问题,今天就从一(不会讲模板的)开始来记录一下并查集的美妙。


1.入门级别:P1196 [NOI2002] 银河英雄传说

这应该是最基础的运用,利用并查集来维护图的连通性,做一类合并问题。

这种题一般十分明显的需要用到并查集,大部分时候用并查集来辅助正解或来打暴力。

像这题……好像没什么好说的。(这题之前是蓝)

就正常维护就行了,真没什么好讲的。


2.入门进阶:P4616 [COCI2017-2018#5] Pictionary

只是留个练习题而已。

至于这题怎么做,把数小的作为父节点,然后用 gcd 信息连成一棵树,在书上跑 lca 维护最大值就行了。

在连边的时候用并查集判断两边是否连上,如果已连上再链接由于边权更大不会更优,所以最终形态是棵树。

复杂度:O(nlog(n))


3.一技能,化图为树:P3366 【模板】最小生成树(气氛逐渐中二起来)

这是利用定义去实现算法的第一种用法,把整张图拆开,再利用并查集去合并。

那么这题,没什么好说的吧……过。


4.一技能二段,spfa 附身(bushi):P4768 [NOI2018] 归程

这是这题的题解

通过并查集来维护生成树的 kruskal 算法,在对比 prime 就有了一点优势,其根本原因是并查集是整张图按照从小到大进行合并,所以在两点第一次连通时,他们的路径一定最小,就可以新建节点对原来两边的节点建边,点权为合并边时的边权,然后用这个新的点来代表整个连通图。

那么两点间的最小值明显就是 lca 的点权。

这道题就祥见另一个博客吧。


5.二技能,败者食尘:P3402 可持久化并查集

比较并查集是数据结构,特色还是得有。

这东西其实很好弄,只需要对操作建树,回退时在树节点上回退即可,这样复杂度是稳定 O(n) 的。但是不能进行路径压缩,所以合并并查集要用启发式合并,所以复杂度为 O(n×log(n))

在线做法其实就跟可持久化数组一个概念,具体就不细讲了。

例题我是真没找些什么,所以一段技能就够了吧……


6.三技能,我是线段树???:P4145 上帝造题的七分钟 2 / 花神游历各国

这玩意是经典的线段树题目,应该学过线段树的都认识,但是为什么它有并查集标签呢。

这就是我在上个版本讲述的并查集处理序列问题。

这题我们可以先考虑一个暴力,那就是从 lr 枚举 ai,然后对于每个数取 sqrt(n) 就行了。

我们可以发现,一个数其实取根号的次数特别少,所以在一定操作后,序列中会有很多 1

那么这些 1 我们是不用修改的,直接跳过就行了。

那么现在问题就是,我们怎么跳过一段全部为 1 的区间。

我们就可以把所有为 1 的区间全部用并查集合并起来,记录并查集的右端点,发现枚举到一个数为 1 时,直接跳过去就可以了。


7.三技能二段,我是平衡树!!!:P5610 [Ynoi2013] 大学

首先这题和上面那个题有个很相像的地方,就是数被除很少次就会变成 1,且枚举时有很多地方不用枚举。

那么就有一个暴力的思路,建 w (值域上限)个平衡树,对于每棵平衡树 i,存储哪些数可以整除以 i。然后每次询问时暴力查找加修改即可。

这题与上题有个不同处,上一题你线段树可以卡过(然而其实是根本没卡),这题平衡树你就寄了。

上述复杂度: O(nlog(n)log(w)),明显没什么问题,但是过于毒瘤的时间限制让你无法发挥。

那么就只能想办法优化了,根据刚刚分析,有很多数其实是不用枚举的,所以我们对于每一个数建若干个并查集来存储当前因数有哪些数没被枚举,然后枚举时直接跳过这些数就行了,当要删除这个点时,直接合并并查集即可。

但是由于这题过于毒瘤,要卡常,慎写。

8.奥义:分块赐予我力量!!!:P3247 [HNOI2016]最小公倍数

题意简述:

给定一个无向图,边权带两个值 (a,b),给定 q 次询问,每次询问给定两个点,求两个点直接是否有 max(a)=xmax(b)=y 的简单或非简单路径。

这种题可以想到一个暴力,把所有 xy 的边加入,用并查集判断连通性并判断是否存在 =x=y 的边即可。

但是对于多组询问,如果每次这么做,复杂度是承受不下的。

我们可以发现,其实每次询问不需要把所有并查集撤销完全,所以我们想一些巧妙的方法,可以让并查集撤回次数变少。

我们先睡个觉

posted @   Gmt丶Fu9ture  阅读(38)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示