Perception & Trick | Establish Mapping in Counting Problems
计数题中,建立合法和不合法方案的映射关系,是一个很重要的思想。
可能算是烂大街了,但是仍然有一些巧妙的应用。
注:本文略去了大多数题目的 DP 转移,因为这并不是本文的主要讲解对象。
Problem A P5933
最简单的模型:图上连通性问题计数。
为了方便,在这里先考虑不带权的做法。设
有以下性质:
-
- 建立“不连通图”向“连通图”的唯一映射:取出
S 中编号最小的点所在的连通块T ,T \subset S ,则构造映射S \to T 。而且还可以建立数量关系:G(S) = \sum F(T)A(S-T) 。
然后状压 DP 就做完了。
满足上述性质即可具备使用该 trick 解决问题的条件了。
Problem B QOJ9116
一个前置的字符串知识:如果一个字符串存在长度过半的 border,那么也存在一个不过半的 border。
然后这个就是简单题了。对于一个有 border 的(不合法)串,找到其最短 border,则这个最短串没有 border(合法)。建立映射完成。
令
有
Problem C CF1089I
一个排列上连续段相关问题的性质,手推起来十分困难,不过前人已经有了现成的研究结果:析合树。
这里略去析合树的部分(可以自行搜索博客)。
题目要求计数的就是所有形如根为合点,下面挂着
那么考虑计数不合法的:
- 根是析点(此时根有
c \in [4,n) 个儿子)。
这种情况的充要条件是任意连续的(多余两个)儿子对应的区间都不是连续段。
将一段值域缩成一个点,惊奇地发现又回到了原问题,但是规模更小,变成了
- 根是合点,也即存在一个前缀为连续段。
钦定最短的是连续段的前缀即可,和 Problem B 差不多。实现的时候可以仅考虑儿子从左到右递增的情况,最后再乘
Problem D P10879
详细题解
其实是有更简单的做法的。以下截取了计算
如果钦定
a,b 最后一次相交在c_0 处,那么计算Q(x \to y) 表示x 到y 走两条不相交路径的概率。但是Q 本身也只能容斥算了,似乎规约到很复杂的问题,一般来说必须\mathcal{O}(n^3) 。如果钦定
a,b 第一次相交在c_0 处,那么c_0 到c 的路径就任意了。我们可以很简单地写出转移:P(a,b \to c) = P(a\to c) \cdot P(b \to c) - \sum_{c_0} P(a,b \to c_0) \cdot P^2(c_0 \to c) 也就是
a,b 先走到c_0 ,再各走各路(可以任意相交)走到c 。
Problem E CF1750F
令
然后建立一个映射:考虑一个不合法的序列,将其操作到不能再操作为止,则操作结束后序列唯一。
此时序列形成
其中每一段
Problem *F CF1605F
先把问题进行转化:记录一个变量
对于不合法的方案,我们可以先不断对其操作,直到不能再操作,即剩余的数
DP 转移较为复杂。
Problem *G AGC067B
考虑判定。将过程倒过来,贪心选取同色段变成通配符,直到不能选取。会剩下一些字符选不了了。那么变成通配符的就是合法方案,整个串就是不合法方案,映射成立。
目前只收录 7 题(一个校内模拟赛题不能公开),欢迎大家投稿。