容斥原理
一些条件,都要满足
为什么容斥问题会有一套专门的计算方法?
其实容斥问题是一种常见子集答案总和的信息,常见的求解方法为DP。
在求解过程中往往需要利用之前已经有了的信息,尝试整体转移,以优化时间复杂度。
容斥模板
子集反演
设 \(f(S)\) 表示恰好选集合 \(S\),\(g(S)\) 表示至少选集合 \(S\)
若钦定至多
二项式定理的两种形式,\(g_i\) 为钦定选 \(i\) 个的方案数,\(f_i\) 为恰好选 \(i\) 个的方案数。
若钦定至少选 \(i\) 个。
若钦定至多选 \(i\) 个。
\(\text{min-max}\) 容斥
权值容斥(前缀和)
\(f\) 为权值 \(=K\),\(g\) 为权值 \(\le K\) 的方案数
图容斥
求无向图联通方案数,\(f(S)\) 表示 \(S\) 联通方案数,\(g(S)\) 表示 \(g\) 中边任选方案数
若 \(g\) 和点数相关
本质是代表元容斥。
求 \(\texttt{DAG}\) 数量,\(g(s,t)\) 表示 \(s\rightarrow t\) 的选边方案数:Finding satisfactory solutions
若 \(g\) 和点数相关
本质是钦定至少有\(T\) 中的点入度为 \(0\)。
列出容斥式
枚举刚好不合法
不等价时:即假设要求元素 \(\le a\),那我就使得元素至少 \(=a+1\) ,进行求解硬币购物
元素等价时:即要求所有元素\(\le a\),直接枚举至少 \(=a+1\) 的数的个数。\(\color{red}Slime段模型\)
局部合法——代表元容斥
整体都要合法的方案数 \(=\) 所有方案数 \(-\) \(\sum\) 代表元部分合法方案数 \(\times\) 另一部分无限制的方案数 \(\times\) 一个结合系数使得合起来不合法。
\(\color{red}连通图计数\)
容斥计算
定义
根据定义式: \(\sum_{S\subset T}(-1)^{|S|}f_S\) 进行计算,复杂度\(\mathcal O(2^n)\)
集合大小等价合并
只与集合大小有关,而不关心里面的元素,可以合并,用组合数表示其系数,复杂度 \(\mathcal O(n)\)
增量法
每次往集合中加入元素进行考虑。
设 \(g_i=\sum\limits_{S\subset\{1,2,\cdots,i-1\},T=S\cup\{i\}}(-1)^{|S|}f_T\),表示为考虑前 \(i\) 个元素,确定 \(i\) 必选时的不满足条件的方案数量,在 \(g\) 之间进行 DP。
带容斥系数DP
就是将容斥系数当作方案的权值,变成一个方案权值和问题进行解决。
具体详见方案权值和问题。
仅仅转移容斥系数的DP
将方案的权值的一些相关信息作为DP的维度,将剩下的信息存入值进行转移:重返现世
容斥模型
Slime段模型
问题:对于一个有 \(m\) 个 \(1\),\(n-m\)个 \(0\) 的,求 \(\forall k\in [1,n]\)其中最长的 01 段不超过 \(k\) 的方案数。
我们可以再\(k+1\) 个 \(1\) 后面添一个 \(0\) 表示一段的结束。
令 \(S(n,t,k,m)=(-1)^t{n-tk\choose t}{n-t(k+1)\choose m-tk}\)
假设当前有 \(t\) 段不满足,带容斥系数方案数为 \(L(k,t)=S(n,t,k+1,m)-S(n-k-1,t-1,k+1,m-k-1)\)
因为还要考虑最后一个段后面不用加 \(0\) 需要将方案数加上,但这里是加上容斥系数\(-1\),所以为减。
答案为 \(A(k)=\sum_{t=0}^{\min((n-k-1)/(k+1)+1,m/(k+1)}L(k,t)\)。总复杂度 \(\mathcal O(n\log n)\)。
ABC模型
[AGC058D] Yet Another ABC String
问题:请计算由 \(A\) 个 A、\(B\) 个 B、\(C\) 个 C 组成的字符串 \(S\),满足子串不包含 ABC、BCA、CAB 中的任意一个的\(S\) 个数。
令 \(n=A=B+C\)。
由于 ABC BCA CAB可以重叠,即 ABCA,于是直接容斥“钦定极长的不满足条件段有 \(i\) 个”,因为长度不知道,我们和"Slime段模型",使得长度 \(\ge 3\) 即可,即抽出一个 A B C 各一个。
一开始不决定这各一个的 A B C 具体是 ABC BCA CAB 中的哪个,而是先决定剩下的 \(n-3i\) 个字符,显然随机排列,方案数 \({n-3i\choose A-i,B-i,C-i}\)。
然后再将这 \(i\) 个极长的不满足条件段插进去,首先插在开头,则可以是 ABC BCA CAB 中的任意一种,否则为了不与上一个字符凑成一组不合法,只有且恰好有 \(2\) 种方式。
还要考虑无序,分成有没有放在开头讨论,最后这部分方案数为 \({n-2i-1\choose n-3i-1}2^i+3{n-2i-1\choose n-3i}2^{i-1}\)
答案为 \(\sum_{i=0}^{\min(A,B,C)}{n-3i\choose A-i,B-i,C-i}({n-2i-1\choose n-3i-1}2^i+3{n-2i-1\choose n-3i}2^{i-1})\)
容斥题目
P3244 落忆枫音:容斥,我觉得难点在容斥式。先假定给所有非 1 的点选择一个入边,再把不合法的情况——即有 \(x\to y\) 且 \(y\to a\to \cdots \to x\) 的路径,成环,减去即可。
两种容斥思路
纵观各种容斥题,常见的思路只有两种,分别为:
(一)钦定容斥
形如:
其中我只考虑 \(S\) 并且怎么怎么样,不难发现发演以及上文两个”容斥模型“都是这种。
(二)DP容斥
不是一般的用 dp 算容斥,而是形如:
即每轮DP中都是用全部的方案减去仅局部合法的方案。之前我以为只有图容斥才是这样的,其实不然,考虑以下问题:
小明家养了 \(n\) 条狗,小明要给他们洗澡。
但是小明有点脸盲,并不会分辨这些狗。所以小明决定洗 \(n\) 次,每次随机选一只狗洗澡。
请问:最后有 \(\ge k\) 只狗被洗过澡的概率是多少?
设 \(g_i\) 表示钦定只有 \(i\) 条被选的方案数,则:

浙公网安备 33010602011771号