task20
[TOC]
1. 集训队互测 2025 - Everlasting Friends? [K] ✔️
题面
给定一棵
两问:
- 求有多少非空集合
在 和 上都是连通块 - 求有多少非空集合
在 和 上都是连通块
答案对
题解
第一问
注意到
那么考虑在
并且容易发现,只要割掉不互为祖孙关系的一些这样的边,一定合法
因此
考虑优化对每个根求,注意到一条
目前为止已经可以有一个
假设我们已经求出了
因此我们修改的是一个包含根的连通块,我们实际上就是对于每条被删掉的割边,设其 dp 值为
这个可以用并查集暴力维护,复杂度除了求逆元之外是
第二问
这两棵树没有什么明显的关系了,考虑找一下连通块的性质。
我们把
这是因为,对于
因此不存在这样的
玩一玩可以发现,当我们确定一个连通块的
那么可以观察一下,可以发现这个确定的点集就是
分析可以考虑不在连通块内的点对
首先在
因此要么
类似的,通过另一边的考虑可以得到要么
因此
那么就可以用数据结构刻画了,我们记录
考虑在
dsu on tree 可以做到
2. 集训队互测 2025 - 封印 [K] ✔️
题面
给定
对每个敌人,你需要选择一个
任意时刻,你封印的敌人数需要
求最大收益。
题解
Sol
考虑我们的操作是什么样的,假设我们第一次获得收益的时刻是
- 必须选择所有
内的区间,获得它们的收益 - 必须选择所有左端点在
内的区间,右端点在 外的区间,不获得它们的收益 - 选择一部分左端点在
外,右端点在 内的区间,获得它们的收益
最后所有选择的区间最大覆盖次数不超过
可以发现固定
进一步地发现,我们的贪心过程和
考虑对
而随着我们对
具体地,可以证明对于任意一组原来的最大匹配,我们加入或删除
其余情况也是类似调整,问题可以在
3. QOJ14419 - Maximum Segment Sum [K] ⭐
题面
给定
题解
Sol
求最大子段和的方式是,维护一个变量
但是平着走这个形式非常不好,因此我们进行如下转化:将平面每个横轴的
这样,
总复杂度
4. QOJ14713 - Heuristic Knapsack [E]
题面
给定
Alice 会将所有物品按照
Bob 会将所有物品按照
求是否有构造方式使得 Alice 和 Bob 取出的物品下标集合相等
题解
Sol
这个问题的形式看着很差,所以可以猜测一下我们最后是固定不多的可能的解,然后暴力 check。
考虑进行一些分析:首先,Alice 选择的一定是一段
那么,我们把所有
而接下来考虑
可以发现我们要选到答案集合里的一定是一段前缀,否则我们换一下一定不劣
其次可以发现,看起来我们把
因此如果确定了最后我们选出的答案集合之和
最后,我们说明
因此我们对每种
但是出题人心地险恶,
复杂度
5. AGC074D - Valid Output for DSU Problems [E]
题面
按照如下方式生成一个 01 串
有一个
- 对于所有
,有一个在 之间加一条边的操作 - 对于所有
,有一个查询 是否联通
你需要重排所有操作,然后根据每个询问操作是否连通生成一个长为
现在给定
题解
Sol
假设确定了加边的顺序,那么每一种询问都是前面的一些时刻为 0,后面的一些时刻为 1,我们要判断的是能不能生成某个 01 串
可以发现,我们顺着扫,每遇到一个 1 一定取当前最早变为 1 的,而如果倒着扫,每遇到一个 0 一定取当前最晚变成 1 的
那么有了这两个直觉,我们就可以发现我们将所有询问按照变为 0 的时间排序,假设有
因此,可以发现,设
也就是说,设我们边数变化依次为
有了这个限制之后,我们直接枚举
枚举了
那么我们就得到了一个
把它优化到
6. EGOI2025 - Wind Turbines [E] ✔️
题面
给定一个
题解
Sol
显然对于原图我们可以只保留最小生成树上的边。
而连一些边之后意味着我们会断掉一些原树上的边,那么我们对于一条边考虑它什么时候会被断掉
经过一些思考,我们可以发现,设
那么我们建出 kruskal 重构树,这个对应的就是这条边两个子树中均有
启发式合并求支配点对即可,总复杂度
7. QOJ970 - Best Subsequence [E]
题面
定义一个序列的
选出这个序列的一个长为
题解
做法 1
Sol
考虑如何求一个序列的
这个可以贪心:从小到大贪心选数,假设当前扫描到了
可以发现如果不考虑环的情况,那么一个数的前驱和后继都是固定的
而截出来一个区间的时候,会因为是环出错的只有前缀最大值和后缀最大值,那么我们把前后缀最大值单独处理
对
这个可以找到第一个
check 一次复杂度
做法 2
Sol
求一个序列的
但是这样不方便计算,原因也是做法 1 中提到的前后缀最大值的问题
那么我们忽略这个问题,直接按一个数
可以发现,非前后缀最大值计算的一定是正确的,而前后缀最大值可能多算一些东西,但是可以发现,算出来的和答案的差不超过
因此我们可以通过线段树上二分找到一个算出来的
8. QOJ10872 - Kid’s Game [E]
题面
给定一个 GZDPX 中的一种,两个人在上面博弈
如果一行相邻两个元素依次为 GZ,先手可以将其改为 DP
如果一列相邻两个元素依次为 DP,后手可以将其改为 GZ
不能操作者输,若游戏会无限进行则平局,求游戏结果
题解
Sol
把 G 变为右箭头,Z 变为左箭头,D 变为下箭头,P 变为上箭头
可以发现,所有箭头要么在右下之间切换,要么在左上之间切换,因此这样可以串出来若干个阶梯状的链,链之间互不影响
而对于每条链,我们可以视作有左箭头和右箭头,先手可以操作所有奇数位置上的 RL,后手可以操作所有偶数位置上的 RL
可以发现,我们直接计算每个链操作到 LLLLLRRRRR 为止先手比后手多操作的次数加起来如果
那么直接计算即可,复杂度
9. IOI2023 - Closing Time [E]
题面
给定一棵
定义一个点
给定两个特殊点
题解
Sol
显然每个
如果
否则,
这个可以用反悔贪心实现,复杂度
10. IOI2023 - Longest Trip [E] ⭐
题面
交互题。
有一张隐藏的
现在初始给定
现在你需要在不超过
题解
做法 1 (85pts)
Sol
考虑维护一条链,每次我们加入一个点
那么我们只要找到任意一个和
显然可以通过二分找到一个有连边的点,但是这样的点有可能不存在,并且这样的操作次数也过多
因此我们需要多设计一些状态,具体地,最后可以使用如下三类状态:
- 已知一条路径串起来当前加入过的所有点
- 当前加入的点不连通,不难发现这种情况下两个连通块一定分别是团,我们求出这两个团的点集
分别是什么 - 已知一条路径串起来当前加入过的所有点,并且我们知道两个已经加入过的点
,满足 之间没有边
对于第一种状态,我们加入一个点
对于第二种状态,加入一个点
对于第三种状态,加入一个点
对于所有不涉及转状态的加入操作,我们都使用
因此总操作数为
做法 2
Sol
没有什么思路,因此我们首先尝试询问所有
注意到若
因此我们可以尝试改进一下这个策略,维护一个链的集合
可以发现
用
- 如果
不存在,直接询问 链尾和 ,根据是否有边选择将 加入 或者作为新的 - 若
存在,询问 和 ,如果 和 有边,将 作为新的链,否则将 加入 末尾
可以发现,这样我们得到的
将这些链合并在一起就比较简单了:当链数
最后两条链的时候查询一下是否有连边,如果没有直接输出,如果有的话再进行一些讨论,容易在
因此我们一共需要
11. IOI2023 - Soccer [E] ⭐
题面
给定一个
现在求面积最大的四联通区域,使得其不包含任何障碍,且对于其中任意两个格子
题解
Sol
肯定要找充要条件,不难发现一个必要条件是区域连通且是“凸”的,即每行每列占据的格子都是一个区间
除此之外,可以发现任意两行的区间应该有包含关系,否则分别在两行的差集内取一个格子,这两个格子将无法拐一次弯到达
结合这两个条件之后,可以发现这是必要的。
那么我们可以列出
令
那么我们就得到了一个
可以注意到,我们的
进一步地,可以发现向
可以分析出来这样的状态只有
而这些状态我们可以记录成:选择一个
现在我们的状态是
总复杂度
12. QOJ12305 - Permutasino [E/K] ⭐
题面
给定一个长为
题解
乱搞
把
那么我们可以猜测这个条件是充要的。
这个可以看成,数轴上我们有
那么考虑初始选
我们选择一个排列,一直移动直到有一个点到了特定的位置为止,这样重复
但是如何选择排列——我们选择的排列需要满足如下事情:
- 首先,我们不能把合法的序列操作到不合法
- 其次,我们的速度要足够,即我们总共使用的时间不能超过
最后我使用的策略是,将向右的点视作 (,向左的点视作 ),对于每一个极长的 (((())))))) 段,设左右括号数量分别为
这样看起来在随机数据下不会出现上述两个问题,所以通过了。
Sol
由于必要条件是前
那么考虑如果存在一个
设我们构造出来的解满足前面的排列等于
我们可以通过打擂台,一开始取
这样匹配出来我们会使用
但是对于原问题,我们不一定有这样的一个
因此我们考虑,任选一个排列
这个
13. QOJ11723 - I’ve Got Friends [E]
题面
给定一张
题解
Sol
摘抄一下 std 做法,我的做法太垃圾了。
题目即给定一个无向图,要求构造一张图使得给定图是它的线图。
首先我们去除重边,可以发现如果有两条边相邻,并且它们的邻边集一样,那么一定存在构造使得它们两个互为重边,因此缩掉即可
可以证明,当一个连通图
那么考虑增量构造每个连通块,每次选择
- 若
,暴力找任意合法的图,当加入后有五个节点时,我们恰好能构造出唯一合法的图 - 否则,判断是否能新加一条边使得这条边的邻边集是对的,如果邻边集都和一个点相连,那么将新边与这个点相连,另一端与一个叶子相连,如果邻边集都和两个点相连,且这两个点之间没有边,那么直接连起来
- 其余情况无解。
复杂度
14. QOJ11722 - Hamilton [E]
题面
有一个
给定
题解
Sol
不妨假设
可以发现,奇偶性有一定意义,因为如果
这个题看起来答案如果很大的话就不好做了,因此我们看看能不能找到一些边权和比较小的方案
而用
那么我们增加一个点,同时用
而解
那么把
复杂度
15. ULR3 - Again Counting Stars [E]
题面
给定一个长为
- 将
加 ,然后 - 将
减 ,然后
过程中需要满足
最后需要满足
题解
Sol
不难发现和不变。手模一下,可以发现我们一定是把一些值向右挪,那么求前缀和,把一个值向右挪的操作就相当于是给前缀和数组单点
而额外地,这个光标的形式限制我们的前缀和数组改变的一定是一段包含
, - 所有满足
的 组成一个区间,要么这个区间为空,要么这个区间包含
如果没有第二个限制,我们可以使用容斥,将一些
现在要求区间包含
改一改上面的 dp,在合适的位置给 dp 初值
总复杂度
16. ULR3 - 成王败寇 [K]
题面
给定一棵
是 的后缀(可以为空) - 对每个
,若 ,那么 的第 个字符应为
题解
Sol
建出 fail 树,对每次询问,考虑分情况讨论,设最大的限制是
- 若
,直接暴力 check 所有这样的串 - 若
,找到这些 对应的第 个字符,由于 ,那么这些节点子树大小至少有 ,因此这样的子树不超过 个,对每个子树数一下内部有多少在 的 fail 树祖先上的点即可,这个可以在 fail 树上 dfs,然后用 平衡的分块维护
总复杂度
17. ULR3 - 我的 XOR 卷积人生 [K]
题面
交互题。实现一个程序,能对两个下标为
题解
Sol
考虑位运算卷积的更深刻理解。
我们可以把每一位都看成一个形式元
同理,对于 OR 卷积,这个就是
但是现在
这个也可以将其平移为
最后再平移回来,这个式子可以通过子集卷积处理,还是加一个辅助 popcount 维
复杂度
18. QOJ14942 - Buggy Painting Software II [K]
题面
通信题。
给定
交互库对每个数组,选择一个
Bob 会收到这
题解
Sol
考虑先将所有数组的
如果
但问题在于
注意到上面这个解告诉我们的事情是对于一个质数
那么我们在
解码可以使用 kmp 或哈希。
19. CSP-S 2025 - 员工招聘 [E]
题面
有
这些人会按照某个顺序来依次应聘,第
此外,对于一个人
给定常数
题解
做法 1
Sol
显然我们需要按照天数考虑,否则
假设我们依次决定每天有没有录取人,那么每天的要求相当于
注意到
转移仔细讨论一下。
做法 2
Sol
依然是从前往后考虑每天有没有录取人,那么每天的要求就是
我们把
转移也可以讨论做到
20. NOIP2025 - 树的价值 [E] ⭐
题面
给定一棵
请在每个点上填一个非负点权,最大化每个节点子树 mex 之和
题解
Sol
考虑固定每个点最后的子树 mex,我们判断是否能达成
那么考虑从下往上填数,假设我们已经满足了每个儿子的 mex,现在要满足
此时 mex 有可能不够,不够的话我们就可以用子树还没有使用的节点把 mex 补满
而注意到此时我们找到 mex 最大的子树,如果这个子树还有没有使用的点,那么我们在补 mex 的时候会扩大这个子树的 mex,所以这种情况显然不是最优的
那么对于每个点
我们把一个点的指向它 mex 最大的儿子的边看成实边,那么实边就组成了这棵树的一个链剖分
而对于每个点
也就是说,我们需要选定链剖分,然后每个点的价值为:祖先中最长的实边连续段的长度,我们要最大化这个价值和
那么就容易写出一个
考虑进行优化,首先我们把状态变为
我们除了求这个值的部分都是
因此总复杂度
21. NOIP2025 - 序列询问 [E] ⭐
题面
给定长为
题解
Sol
显然我们需要求前缀和。
那么画到二维平面上,横坐标为
首先可以发现我们容易
而注意到,对一个梯形我们可以进行如下处理:

当
而对于一般的情况,我们有多种处理方式:
如果
,其中那么 中一定有 的次幂,设其中的 的次幂依次为 ,那么 和 一定都是 的区间,而 的答案我们可以预处理,即初始处理出 的答案,然后区间取 max 将左下角的蓝色三角用这三种图形拼起来:

每种图形都可以直接求
最后复杂度
22. CTT2025 - 异形工厂 [K] ⭐
题面
给定长为
题解
Sol
画一下操作可以发现相当于我们可以把一个
这是出现过的问题,没出现过也可能可以得到贪心做法:
- 我们从左到右扫,假设此时前缀
中的 比 中的 多,维护一个待匹配的桶,下标为奇偶性,如果当前 ,那么就在 的桶中放入一个 ,如果 ,就尝试从 的桶中取出一个 ,如果没有了就从 的桶中取出一个 ,进行匹配,否则 ,什么都不做(其实也相当于两件事情都做了)
可以发现,这个其实就等于,第
将
那么我们只要对每个点
预处理的时候,我们考虑把向上(^)和向下(v)的两种分别预处理,对于其中一种,我们使用栈从左到右维护扫,扫到一个位置时,我们栈中会储存若干个还没有完全求出的区间,对每个区间我们直接维护它们的奇偶桶
可以发现,对于栈中所有的区间,奇偶桶中奇数是递降的,偶数也是递降的,那么我们在这上面进行的操作就是(不妨假设 ^):
- 如果
,那么就是给 桶全部 - 如果
,那么就是 桶 的区间全部 ,然后 桶 的区间,给 桶 ,容易验证操作完之后两个桶还是分别递降的
两个操作都是可以用树状数组维护的,再额外开一个树状数组维护栈内区间的答案
总复杂度
23. IOI2023 - Beech Tree [K] ✨
题面
给定一棵
称一棵树是绝妙的,当且仅当存在一个其节点的重排
- 依次考虑
,如果 在 中出现了 次,那么 的父亲是
求这棵树每个子树是否是绝妙的
题解
Sol
同一个颜色的点的父亲一定组成了
因此,这意味着两个颜色的父亲集合必定为包含关系,这可以等价表述为一个点的儿子颜色互不相同,且任意两个点的儿子颜色一定为包含关系
但是这仍然不是充要的,考虑接着强化我们的条件。
注意到如果
这样推下去,我们可以发现如果
此时可以发现,这就是充要的,我们将所有子树拿出来,那么大小相等的子树应该完全一致
每次我们将一个大小最大的子树排在最前面,并且如果
因此,我们已经得到了一个可以检验的判据,即将所有子树按照
注意到判断包含关系我们只要判断子树
而求每棵子树是否绝妙,只要启发式合并
复杂度
24. QOJ11630 - Simple APSP Problem [E] ⭐
题面
有一个
题解
Flamire 做法
Sol
考虑将网格缩起来,对于一段极长的没有障碍的行将其看为一个整块,一段极长的没有障碍的列将其看为一个整块,最后形成一个由块形成的矩阵,矩阵一共有
可以猜测一下,两个块内任意点对之间的最短路,在块矩阵上经过的块都是一样的,画一画可以发现这个非常有道理
进一步发现,如果一行或一列是多行合并出来的,那么我们显然不会跨过这个行/列两次,因为这行/列是完全空的,这确实没有什么意义。
因此,我们可以总结,两个块之间任意点对的最短路比
以每个块为起点跑一下 bfs,然后用二次函数求和即可
复杂度
题解做法
Sol
本质相同,但是比上面更好的表述。
对于两个相邻的空行,任意最短路显然不会经过这个行两次,因为这是一个空行。
那么我们可以直接给答案加上上面的白格子数乘上下面的白格子数,然后将这两个空行缩起来,直接成为一个空行(空行中的格子带一个统计答案时的次数)
最后会缩成一个
25. APIO2025 - Road Closures [E]
题面
给定一棵
对每个
题解
Sol
当
注意到对每个
因此我们考虑对这个做一些事情。
注意到对于一个度数
那么我们把所有度数
令
转移容易做到
复杂度
26. APIO2025 - Rainforest Jumps [E] ✔️
题面
给定一个长为
如果你当前在
题解
Sol
原来的做法有点烂,这里介绍一个干净一点的做法。
对于一个区间
那么我们找到
由于
在
那么接下来我们需要解决的就是一个点到一个区间的问题
设
可以发现我们一定是尽可能想跳到左右两边更高的那个的,仔细讨论一下我们的跳的过程,设
- 如果
的值 ,那么一定直接跳过去 - 如果
的值在 内,那么如果 已经在 内,一步走过去即可,否则从 再向右走一定走到 内,只需要两步 - 如果
的值 ,那么 一定是向左跳,此时我们只能一直向右走,走到 内
这些都可以倍增优化,总复杂度
27. THUPC2026 初赛 - 覆盖游戏 [K] ⭐
题面
有一个
你需要用
求覆盖方案数量,我们认为
题解
Sol
趣味。
可以发现这个
注意到极长的非障碍横条竖条一共有
如果我们把填横条竖条看作给每个格子填横向还是竖向的话,这个意思就是有
可以发现这个限制很强,因为我们直接确定了一个极长横条/竖条的方向,并且根据抽屉原理,至少有一个障碍格子有大于等于三个方向不被指向,那么我们对这样的障碍格进行讨论:
情况 1:存在一个黑格任何方向都不被指向

此时这些方向已经至少需要
情况 2:存在两个黑格,只有一个方向被指向

手玩一下,可以发现可能的情况只有上图,以及其对称情况
那么设两个黑格中间有
而竖条一共至少有
情况 3:有小于等于一个黑格,只有一个方向被指向
此时至少有
因此我们证明了至少需要
而接下来考虑如何计数,我们显然只用考虑情况 1 和情况 2:
情况 1:方案数可以拆成四个角,分别延伸的方案乘起来
情况 2:中间
列的已经确定,必须是延伸到不能延伸为止,而四个角上也是类似的独立问题,可以拆开乘起来
现在我们就是需要解决形如:左边界上有一些横向长条,下边界下有一些竖向长条,我们需要延伸这些长条覆盖这个区域内的所有非障碍格子
观察得到下图:

即:
所有障碍必须是从左下到右上的,否则两个障碍会挡出一个无法被我们覆盖的格子
我们画出分割横条和竖条的边界线,可以发现这是一个从左下到右上的折线,并且经过每个障碍格子的右上角
但这不是完全一一对应的,如果我们经过了一个障碍的左下角,从两边走到这个障碍的右上角都对应着同样的分割方案,减掉即可
那么我们就可以成功递推出每个格子右上角的方案数
重复若干遍,然后按照之前的计算方式乘起来即可
复杂度
28. APIO2022 - Mars [E]
题面
一个下标为
你需要设计一个机器人,求出陆地四连通块数
机器人的磁盘里有一个
这个机器人按照如下方式操作:
- 首先,循环
,计算 - 对于每一个
,依次处理
其中,处理一个格子
你会将
你需要进行所有操作之后,使得
题解
Sol
在第
我们采用如下策略:做完一轮的时候,我们用
对于
- 右下角轮廓线上每个非障碍格子的等价类情况
- 没有碰到轮廓线的连通块个数
第二个信息显然只需要
注意到将轮廓线展开成一维后,等价类形成一个类似于括号序的东西,因为不能有两个连通块交叉
那么我们随便写出一个可能的序列:
1 | 1 0 2 2 0 2 0 3 0 2 0 1 0 0 4 0 1 |
一种思路是将所有格子指向下一个与它同等价类的格子的边传输过去,而由于我们是括号序列,所以只需要传每条边的起始点和终止点
但是如果我们每一个位置都是
那么我们想办法提前传一些信息,比如我们对于让除了
这样相当于我们已知了每个位置是零还是非零
1 | 1 0 2 2 0 2 0 3 0 2 0 1 0 0 4 0 1 |
而注意到每个连续非零段一定属于同一个等价类,并且每个连续非零段的下一个一定是 0
因此我们可以将每条边的出发点移动到这个非零段后面的 0,这样每条边的段点,如果在 0 的位置,那么一定是起始点,如果在非零的位置,那么一定是终点,那么我们只需要传每个位置有没有端点即可:
1 | 1 0 2 2 0 2 0 3 0 2 0 1 0 0 4 0 1 |
这部分我们使用了
最后通过这些信息即可还原出整个图的连通块数
29. APIO2025 - Game [E] ⭐
题面
一个
题解
Sol
容易将环上不包含非关键点的情况判掉
首先有一个显然的
那么对于一个非关键点,如果
加入每条边的时候更新
而当
对
称能到
如果不交,那么相当于我们知道了不存在跨过
而注意到,
也就是说,我们可以将这个问题分治成两个问题,
接下来考虑如何在这个结构上支持修改:
当我们加入一条边时,我们会扩大
而扩大集合会导致子问题的点集变大,也即多了一些边属于子问题,那么我们就在子问题上再运行加边操作,递归进行
注意到一个点以及一条边只会被下放
但是直接实现空间复杂度可能带
其实下放点的过程就是我们先将
所以从这个方向上可能比较好实现?这样实现出来应该和洛谷题解区的线段树结构做法差不多?
总复杂度
30. QOJ11627 - Rectangles [E]
题面
给定
题解
Sol
称
手模一下二维情况,可以发现这样一定是要么是每
但三维情况不一定是这样的。
首先,如果填满三维的方案可以在
计数所有“平凡”填法是容易的,只要容斥
接下来计数非平凡填法。
我们考虑
显然不会有长方体跨过两个
而非平凡意味着我们有一个井字一样的结构:
1 | ....##....####....... |
其中 # 表示一个余数相同的区域(除了 # 之外还有可能有别的余数和其相同的格子,但它们没有组成整行整列,所以不影响我们重排的方案数)
我们枚举
需要额外求系数
总复杂度
31. CEOI2025 - Boardgame Expo [E] ⭐
题面
给定一个
求划分区间数最小的一组方案
题解
Sol
容易观察到解是唯一的:我们最后回答的区间应该满足对于任意
注意到如果原图是一棵树,那么我们可以使用线段树维护点减边容斥,动态维护出所有区间是否是一个连通块
考虑从左往右加点,时刻维护所有区间的联通情况。
再额外注意到,当考虑到
那么我们只要能维护出最大生成树的变化,就可以调用之前的算法解决这个问题
这个可以使用 lct,但我不会 lct,所以我使用了整体二分,相当于二分出每条边存在的时间区间,这个仔细讨论一下,可以用整体二分+可撤销并查集做到
总复杂度
32. CEOI2025 - Theseus [E] ⭐
题面
通信题,有一张
Ariadne 会得知这张图,以及终点
接下来,Theseus 会从图上某一个点
他需要根据这些信息,选择一个出边走过去,走过去之后他将忘记他在上一个节点得知的任何信息,也即他选择出边的判断只能根据他在当前节点能看到的信息进行
请构造一种策略,使得 Theseus 移动的步数
题解
Sol
注意到操作就是给边定向,因为我们可以用
求出每个点的最短路,我们最好的打算就是让每个点想办法指向一个最短路比它小的
但是这并不是总能办到,具体来说,一层内的点可能有很多很多内部的连边,我们没有明显的方式让它们选择向上一层连的边
考虑一些情况:
- 团:每条边从大连向小,所有
的邻边都连向 ,让每个点走向它指向的点编号最小的出边,那么所有点都会先走到 ,再走到 - 注意到我们一层内的点,势必要某些点的
增加 ,但是我们能造出一个树一样的结构,给每一个当前层的点下面挂上任意的图,因此看起来我们需要对 增加的点需要有一定选择性,特别地,我们可以期望找到一个类似于启发式合并的过程
有了上面的启发,我们设计一个过程:
从
我们按照
容易发现这样我们造出来的边,每走一次同层的边都会让
- Title: task20
- Author: Flamire
- Created at : 2025-10-28 00:00:00
- Updated at : 2025-12-30 12:10:45
- Link: https://flamire.github.io/2025/10/28/task20/
- License: This work is licensed under CC BY-NC-SA 4.0.
