做题笔记 2023.3
准备倒序的把这个月做过的有意思的题都写一写简要题解,当然也可能有些稍微古早一些的题目。
ABC213G Connectivity 2 展开目录
题目让我们对
,表示 内任意连边的方案数。 ,表示 内点连通的方案数。
最后的答案可以表示为:
前者是好做的,我们可以先求出两个端点都在
本题最 educational 的地方在于
这种转移方式在很多连通性相关的题目中都能见到。
计算答案即可,第二部分使用子集枚举的复杂度为
CF1685D1 Permutation Weight (Easy Version) 展开目录
不难发现
考虑证明
建图,
重新建图,为
在原图中从每个环中删去一条边不会影响原图和新图的连通性,而新图中至多能删去
AGC019F Yes or No 展开目录
很有意思的一道题。考虑如果
将原问题放在网格图上考虑则相当于,我们从
不难发现
最终答案为:
线性计算即可。
CF1781G Diverse Coloring 展开目录
受题解启发,晚上想到一种奇怪的构造方法。
首先断言答案只能为 0 1 2,并且答案为 2 当且仅当样例中的那种情况,即一个三度点,三个一度点。接下来考虑构造。
基本思想仍然是将树划分成大小为 2 和 3 连通块,但这样可能会出现根节点无法分配的情况。
如果我们能够在树上找到一个二度点,并且满足与其相邻的点中至少有一个是叶子,我们让这个点为根,由于一个儿子一定会传上来 1,根节点一定能够分配到某个连通块内。
但问题是这样的点可能不存在。当这样的点不存在时,考虑找到一个三度点满足与其相邻的点中至少有两个是叶子,我们去掉一个叶子就得到了理想的二度点。于是在删掉叶子后跑之前的构造算法,再考虑将叶子加回来。如果我们构造了奇数个三连通块,新增的这个叶子可能导致染色方案不平衡,但我们可以调整一个三连通块的染色方案,注意这个三连通块不能包含根节点。有没有可能仅存在一个三连通块并且该三连通块包含根节点?答案是有且仅有样例当中答案为 2 的那种情况,否则,除了唯一的三连通块其余点能被划分为二连通块,我们必然能够在原树中直接找到一个上面提到的理想二度点,这就产生了矛盾。
上述算法无法处理仅有两个点的情况,在代码实现时注意一些细节即可。
CF938G Shortest Path Queries 展开目录
路径边权异或和有非常好的性质,因为一个数异或两次之后就会变成 0,所以求路径边权异或和可以直接把两端点到根路径的异或和异或起来。更近一步的,在本题中,我们可以在图中走出任意路径,一条边可以经过多次,不难发现这等价于我们任取一条简单路径,然后异或上图中的若干个环,由于保证查询时图连通,所以我们不关心环是否可达。我们也不关心环嵌套的情况,两个小环的异或就是大环,其他情况同理。
如果没有修改,我们可以先求出图的任意生成树,对于所有非树边,计算其与树边构成的环的异或和并加入线性基,每次查询先取出两点在树上的简单路径,然后用线性基求异或最小值即可。
如果带修,容易发现加边容易删边困难,所以考虑线段树分治。这里考虑我们如何维护每个点到跟路径的边权异或和,实际上在并查集的边上加上边权即可。
CF1034E Little C Loves 3 III 展开目录
本题要求模 4 意义下的子集卷积,传统
更进一步的,如果
这样做法也就呼之欲出了,令
CF794G Replace All 展开目录
如果两个串完全相同,
否则,设
先证一个 lemma,
若
推式子。
这里有两条路可以走,一种是用欧拉函数。
做一个欧拉函数前缀和即可,复杂度线性。
另一种是莫反。
对内层整除分块,复杂度是一堆根号加起来,考虑积分。
故总复杂度线性。
若
计数则考虑枚举
CF526D Om Nom and Necklace 展开目录
一种鬼畜做法。KMP 可以求最小循环节,但是反正我不是这么做的。
首先我们要求的东西可以表示为
hash 可以判断一个串能否表示成
但我们想要做到线性。一种思路是,我们贪心的选取最长的
考虑正确性,首先这个贪心只可能将有解判成无解。如果出现了这种情况,则意味着我们有一个较短的
总复杂度
ARC016D 軍艦ゲーム展开目录
很有趣的题目。本来是个简单的期望 dp,转移方程只涉及一个未知量
考虑二分
然后就做完了,注意
CF1798C Candy Store 展开目录
赛时降智,也可能是手上没有草稿纸的缘故。这场应该算是非常简单了。当然反正我是 div 1 选手,又不会掉分。
我第一眼就是
实际上不难发现这个题直接贪心是没有问题的,考虑如何快速检验一段合不合法。
价格肯定是越小越好,最小是
本作品采用 知识共享署名 - 非商业性使用 - 相同方式共享 4.0 国际许可协议 进行许可。