省选集训-图论杂题
省选集训-图论杂题
CF888G
到现在已经是典中典了。
考虑 boruvka 算法,根据异或性质,事实上 Trie 树也可以叫做一类 boruvka 异或最小生成树树。
所以在Trie上分治做,每遇到一个分叉点就说明有权值,将左边的拿出来查右边取最值即可。
P8260
嗯,史中史。
是这样的,首先读错了一个小时题。
注意到有如下情况:
完全图最小生成树显然考虑 boruvka 算法,维护最优值与与其不同色的次优者即可。
那么就有几种情况:
-
无祖孙关系
可以直接
计算每个 ,由最优性即使存在祖孙关系也会被更新 -
有且只有一对祖孙关系
这里包含了四个情况其实。
但是当前是
作为祖/孙的情况是可以全部压在一个 里计算的——子树回溯的值解决是祖先的情况,而自顶向下传入是后代的情况。 -
祖-孙—祖-孙关系
考虑以
统计,也就是利用 dfs 序,线段树合并,单点修改,区间查询最值。 -
孙-祖—孙-祖关系
考虑以
统计,也就是开可持久化线段树自顶向下传,可持久化线段树加入值的时候变成标记永久化区间修改,单点查询即可。 -
孙-祖—祖-孙关系
考虑另一个情况可以通过交换
做到。这里就是自顶向下可持久化线段树单点修改区间查询了。
写起来史诗级的史。
QOJ9904
考虑 Kruskal,将
由于只会合并
复杂度
CF827F
很强的问题。
首先考虑我们首次到达一个位置后能够做什么,走某条边,或者等待某条边的出现。
等待出现这个过程需要一个辅助边,并且周期为
这启发我们将时间按照奇偶分类讨论,那么不妨将点拆为奇点和偶点,那么边就会变成四条有向边。
这样的话,我们统一奇偶性后,一个状态就可以被描述为
那么对于一个
注意到这样我们就遍历了所有
UOJ 32
笑题。
考虑到数据范围偏小,思考如何判断负环。
注意到我们需要记录路径上
那么考虑一个负环是如何诞生的。
考虑
那么我们可以处理出对于每个
然后再对于每个点
gym104076I
我们猜测当
因此对于原本所有的
在所求路径的
事实上我认为在
这个可以通过动态规划
然后分开奇偶性,就变成
这个由于一次函数单调性,快一些的可以是求上凸壳
P7353
直接交的。
发现Jerry可以在一个点双里一直周旋,只要
所以 Tom 获胜的条件应当是阻止Jerry逃入一个
好像不太对,应当是逃入一个
但是Tom 每一次肯定会走在割点上,不然Jerry可以走到整个图任意位置,只要Tom再走一步不会锁死,那就永远不会锁死,这种情况只有走到一条链上,但是这还是相当于Tom下一步走到割点上锁死Jerry
那么Tom 能够走的每个位置就很感人了,如果不考虑复杂度,求出割点后把原图上相连的割点连起来就得到了Tom的行走路
考虑建立圆方树,然后Jerry必败的条件就应当是Tom 到 Jerry 这个方向的子树里的每个割点都可以通过每次走一个割点到达。
也即是说,定义一个节点是好的,当且仅当其往上走的第一个割点与它直接相连
当 Jerry 必败时,当且仅当
- Tom 所在位置是割点
- Tom - Jerry 子树方向上任意一点是好的
需要换根一下求子树外合法的情况
不过在一个菊花的情况,是可能存在一个必胜点的,Tom 走到必胜点后就必胜了需要判掉。
QOJ4892
考虑到要求是固定三个数之间的中位数,因此对于限制
- 轮换
那么这个题就可以改写为 2-SAT 了,可以定义状态
并且对于
那么就
round 2:难度直线上升。
AGC025E
设
考虑限制
更进一步,发现限制的这些点组成的环在原图上的路径就达上界了。
更好地,我们将所有限制建立一张图,如果这个图可以拆解为若干环,那么就容易了。
这是容易的,如果每个点的度数都是偶数,每个连通块跑欧拉回路即可。
否则考虑将其改造为一个每个连通块都有欧拉回路的图而不影响答案,最直观的是加入树边,将其当作一个限制可以将影响最小化且如果是将奇数度化为偶数度,那么最后欧拉回路的方案也是有原本的
所以再自底向上跑一个
loj 3682
考虑球的运动轨迹,不难想到将一个挡板拆为上下两块,然后按第一次可达点连边,每个点度数最多是
根据题面信息,环长是
然后考虑如何构造方案,只需要知道一个挡板两个点颜色相同,任意一个环最终颜色均分四种即可。
那么对于每个环建立一个点,对于一块挡板所在两个环将这两个环代表点连边建立新图(自环也算)。
那么新的问题就是将每个点相连的边染为四种颜色并要求均分。
可以考虑先均分两色,然后对于两个颜色再分别建图,每个点度数是四的倍数,再次分为两色,问题就解决了。
那么问题就简化为了均分两色。
可以想到欧拉回路出入度相同,启发我们使用欧拉回路相关方法。
对于不含自环的图,跑一条欧拉回路,按顺序染黑白色显然是对的,因为除了起始点外都是一个颜色进一次另一个颜色再出去,而起始点是经过了偶数条边回来,颜色也能对上。
考虑到自环在这里的实际意义其实是当两条边再算,如何特殊处理?答案是不需要特殊处理,模拟欧拉回路的染色可以发现,自环个数也会均分,如果一个颜色的自环更多则其对应的边也会少一条平衡。
那么现在就是超级源点怎么搞成八的倍数了,事实上再加入自环让其变成八的倍数即可。
CF1305H
好强的题目
考虑将其看作一个多匹配,不妨设
使用霍尔定理,考虑一个人的集合
当
因为我们要最大化排第一的人数,因此考虑
但是注意到有部分值是确定的,因此
这样求出每个
在这个 check 的过程中可以顺带求出最大的首项值。
那么现在我们就来考虑如何求最优
做到这一点非常简单,考虑将所有值初始化为
P7307
以前做过。
考虑分治,类似二进制赋颜色,因为是二分图,所以定义将左->右为黑色,另一边为白色,将其代表颜色的值的当前二进制为置为0/1,就可以保证后续互不干扰。
跑欧拉回路分配即可。
P6790
广义串并联图方法:删一度点,缩二度点,叠合重边。
设
- 删一度点,由于求生成树要求连通,将答案乘上
- 缩二度点,连通的方案就是
,不连通但是注意两边都不能不连通,这样这个点就没了,所以是 - 叠合重边,连通是
,不连通是 。
P8426
神题。
结论:添加辅助边
先考虑整个图都是点双的情况下,通过广义串并联方法缩完后,如果是一条边,是容易判断的。
如果是多条边,那么每个点度数至少为
所以
所以
因此我们说明了,答案为假当且仅当广义串并联图方法缩完图后有且只有一条边
QOJ4219
还是考虑匹配。
将一对不喂食会打架的蚂蚁连边,那么就变成了二分图最小点覆盖问题,转化后变为二分图最大独立集。
考虑到如果一个黑点在独立集中,则其右上方白点都不在独立集中,一个白点在独立集中,则左下方黑点都不在独立集中。
那么最终方案应当是找一个左上到右下的折线,满足折线上方的黑点在独立集中,折线下方的白点在独立集中。
问题转化为找到这样一条折线,使得上方黑点数加下方白点数最大。
变成最大匹配问题,也就是相当于对于每个黑点,找到其匹配的右上方白点这两其中之一不产生贡献——即这两个点在折线同侧。
这就足够了,贪心地可以求解一组最大匹配方案(将黑点
然后就可以构造斜线了,我们强行要求其在折线同侧,也就是按
如何扩展到动态?不难发现随着白点的加入折线只会不断上移,那么对于当前在折线下方的点状态就是固定的了(白点固定产生贡献,黑点固定无贡献),可以直接删去。我们就可以使用整体二分来解决这个问题了。
P9528
考虑使用霍尔定理,事实上还是选出若干段
所以不妨设
这里如果连续选择的两个
不妨设
考虑线段树维护
-
增加蚂蚁
相当于
在同一段区间做区间加减。只会对
的状态产生影响 -
增加方糖
相当于
在 做加减,而 在 做加减注意到中间间隔不超过
,那么根据最优性, 至多选择一个 和一个 ,也是容易修改的。
当然,为了统一这问题,也可以看成
这样增加蚂蚁和增加方糖就统一了起来。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!