构造题经典套路

构造题虽然一般都非常需要思维,但是有些题目还是比较套路的。——不是指的完全就是套路,而是它们有类似的方法。如果能在遇到这个题的时候能快速发现并往这个方向靠的话,应该会有很好的做题效果。
本文的内容很大程度上参考了 2021 国家集训队论文。
鸽巢原理
很多构造题会有要求你构造权值不少于或不超过一个数字的方案。如果我们能找出若干个可行的方案,使得这些方案的权值和为定值,那么不妨考虑在这些方案里面选取最优的进行。
假设有 个可行的构造方案,这些方案的权值和为 ,则这些方案中权值和最小的方案的权值和 ,权值和最大的方案权值和 。
CFgym102900B Mine Swap II
给定两个 的扫雷地图。你可以操作不超过 次。每次操作可以把一个图的一个地雷改成空地或把空地改成地雷。
构造一种方案,令两个地图上空地的数字和相等(空地上的数字等于与其八联通的地雷个数)。
。
题解
注意到数字和实际上相当于相邻的地雷与空地的对数。这意味着:交换地图中每个格子的状态(地雷改成空地,空地改成地雷),数字和是不变的。
于是构造出两种不同的方案:
- 将地图 A 暴力修改为地图 B。
- 将地图 A 暴力修改为地图 B 的反图。
显然对于任意一个格子,其只会在这两个方案中的恰好一个方案中被修改。两种方案修改的格子数之和为 ,选择代价较小的一种,根据鸽巢原理不难发现操作数符合条件。
CF1450C Errich-Tac-Toe
给定一个三子棋残局,已经放置了 个棋子(棋子颜色为黑或白)。你需要反转不超过 个棋子使得原局面变成平局。一个局面是平局当且仅当不存在横着或竖着的连续三个同色棋子。
。
题解
对地图三染色,即坐标 的格子的颜色设置为 。
不难发现对于任意 ,将 颜色格子上的黑子改成白字, 颜色的格子上的白子改成黑子,就可以使原局面平局。而 有三种颜色都可取。取代价最小的一种即可。
1 |
|
dfs 树
对于一个图上问题,建立 dfs 树往往是一个重要思路。dfs 树通常会在边定向、找出一些满足特定条件的集合上用到。
一般的构造题我们遇到的都是无向图。无向图的 dfs 树中非树边里只有反祖边一种边。这个性质在解题过程中非常有用。
一般情况下,优先考虑原图是一棵树的情况,可能会使解题更加轻松。
CF1364D Ehab’s Last Corollary
给定一个无向联通图和一个整数 ,你需要找到如下两个中的任意一个:
- 一个大小为 的独立集。
- 一个大小不超过 的简单环。
。
题解
先判掉原图是树的情况——按照每个点深度的奇偶性把点集分成两个,取点数多的那个集合(如果多出来了就去掉若干个),不难发现这一定合法。下面我们考虑原图不是一棵树,也就是反祖边一定存在的情况。
跑出原图的一个 dfs 树,对于每个返祖边 ,若 ,则这条返祖边和两点在树上形成的路径共同构成了一个长度不超过 的简单环。
若不存在,则说明 dfs 树的深度至少为 ,且对于任意一对深度差在 的点都没有反祖边连接。取深度最大的点和其 级祖先即可。
1 |
|
LOJ3176 景点划分
给定一个无向联通图和三个正整数 ,满足 ,你需要将每个点划分为三个大小分别为 的点集,使得其中至少有两个点集内部是联通的。或判定无解。
。
题解
设 ,我们构造的联通集合为 A,B,另一个为 C。
优先考虑原图是树的情况,把重心拿出来判定是否有不小于 的子树即可。因为若所有子树大小都比 小,则 A,B 两个集合都需要覆盖到重心,这显然不合法。
然后推广到一般图,建立 dfs 树,找到 dfs 树的重心 。若 本身就存在不小于 的子树就可以直接做了,否则考虑利用返祖边。
设 的父亲所在的子树为 , 的儿子对应的子树为 ,从小到大加入有反祖边的 ,直到 和加入的 的总大小不少于 即可。若全部加入则无解,若加入成功则和树的情况类似在剩下的点里扩展出一个 即可,这个 是一定能找到的。因为此时 对应的的连通块大小不超过 ,而 。
1 |
|
递归与增量
在一部分构造题中,问题的结构拥有很大的相似性。这时候往往意味着我们的构造也具有很大的相似性或周期性。此时我们通过递归构造的方式,在子问题的基础上进行一些调整来得到原问题的构造,通常是不错的选择。
值得注意的是,递归构造可以是一种思想,实际实现的时候,需要考虑算法时间复杂度的问题。
还值得注意的是,有些题目从递归构造的题目不好像的时候,可以考虑增量构造。
CFgym101221A Baggage
在一个长为 的纸带上,编号 的格子上写了 这样的 01 串。每次操作可以平移相邻两个数到相邻两个空格子里。
构造一个操作数最少的操作序列使其变成 (起始位置任意,中间不能有空位)。
。
题解
注意到第一次交换只会减少一对相邻的不同数字个数,随后每次操作最多减少两对。因此我们求出了答案的下界为 nnn。下面我们来考虑如何构造。
进一步手玩小数据发现最终序列在 的位置上。考虑递归构造。
设 为将 的数还原并放在 的位置上。构造出如下符合条件的方案:
不难发现这样构造能达到下界。
1 |
|
Androgynos"
构造一个 个点的图,使其与自己的补图同构,或判断无解。
。
题解
考虑边数一定要是 的倍数,不难得到 或 的情况无解。
当 时,很容易构造出一组合法的图。
然后考虑增量构造,每次增加四个点,注意到 时一条链就是一个合法的图。于是每次添加一条四个点的链,让链两端的点向原图的每个点连一条边即可。
- 标题: 构造题经典套路
- 作者: Arahc
- 创建于 : 2022-10-12 08:00:00
- 更新于 : 2023-03-16 13:56:42
- 链接: https://arahc.github.io/2022/10/12/【笔记】构造题经典套路/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。