主题:容斥反演。
容斥
求 \(n\) 个集合的并集。
\(S\) 不可为空。
简单证明:
考虑一个元素出现在 \(p_{a_1},p_{a_2},\dots,p_{a_x}\),考虑其的贡献。为 \(\sum\limits_{S\in a}(-1)^{|S|-1}=\sum\limits_{i=1}^{x} (-1)^{i-1}\binom{x}{i}=1+\sum\limits_{i=0}^x (-1)^{i-1}\binom{x}{i}\)。根据二项式定理对其进行变形,\(1-\sum\limits_{i=0}^x(-1)^i\binom{x}{i}=1-(1-1)^x=1\)。
有时候需要求集合的交集,令 \(\overline{A}\) 为 \(A\) 的补集,则 \(\overline{\overline{A}}=A\),\(\overline{\cup\overline{p_i}}=\cap p_i\),令 \(Z\) 为全集,则 \(|\cap p_i|=|Z|-|\cup\overline{p_i}|\)。
注意到在容斥式子中我们给出了 \(S\) 不可为空的限制,因为在大多数题目中,当 \(S\) 为空时可以直接求出 \(|Z|\)。如果可以,那么求交集时会有另一个式子:
\(S\) 可以为空。
不定方程计数。对 \(\sum\limits x_i=S\),\(0\le x_i\le K\),对解计数,\(n,K\le 10^5\)。
将 \(x_i>K\) 作为属性,求集合的并集,然后利用总方案数减去并集大小即可。注意所有方案均需满足 \(0\le x_i,\sum x_i=S\)。如果钦定了 \(i\) 个位置满足 \(x_i>K\),那么直接插板即可,给出答案:
给一张无标号图 \(G\) 和一张有标号树 \(T\),求有多少种给 \(G\) 标号的方式使得 \(T\) 是 \(G\) 的一棵生成树,\(n\le 17\)。
如果一开始就往容斥上想并不好做,考虑一个暴力的做法。
首先给图标号这种事情看上去无从下手,考虑先给图随便标一个号,然后统计有多少种映射合法。令 \(f_{i,j,S}\) 代表 \(T\) 上的 \(i\) 映射到了 \(j\),\(i\) 的子树内的映射到的集合是 \(S\) 的方案数。转移做子树合并。时间复杂度 \(O(n^33^n)\)。
考虑复杂度的瓶颈在于状态中的集合 \(S\),其作用是为了避免重复,尝试用容斥去掉 \(S\) 这个限制。
令 \(g(S)\) 代表 \(T\) 中的所有点不必映射成 \(n\) 阶排列,而是只需映射到 \(S\) 这个集合中即可。那么答案就是 \(\sum\limits_{S}(-1)^{n-|S|}g(S)\),我们将映射后每个点是否被映射到视作属性,那么我们就是要求所有点都被映射到,\(g(S)\) 实际上同样等价于 \(\overline{S}\) 没被映射到的方案数,做容斥即可,这也解释了容斥系数中的 \((-1)^{n-|S|}\) 从何而来。
考虑如何求 \(g(S)\),我们枚举 \(S\),在做 dp 的过程中要求必须填 \(S\) 中的数即可。时间复杂度 \(O(n^32^n)\)。
从暴力 dp 到正解中最关键的一步思考就是将映射成 \(n\) 阶排列这个条件变成所有 \(n\) 个点都被映射到。
不妨考虑能否将 \(g\) 和答案的关系一般化。令 \(f(S)\) 代表映射到的集合恰好为 \(S\) 的方案数,\(g(S)\) 代表映射到的集合为 \(S\) 的子集的方案数,那么显然存在的关系是:
而我们刚才得到了这样的一个式子:
我们断言,任意对于某个集合的函数 \(f,g\),若第一条关系成立,则第二条关系也成立。给出粗略证明:
对于关于集合 \(P\) 的函数 \(F(P)=\sum\limits_{T\in P}(-1)^{|T|-|P|}\),存在 \(F(P)=0^{|P|}\)。
证明
$$F(P)=\sum\limits_{i=0}^{|P|}\binom{|P|}{i}(-1)^{|P|-i}1^i=(1-1)^{|P|}=0^{|P|}$$
所以 \(f(S)=\sum\limits_{Q\in S}f(Q)\times F(S/Q)=f(S)\)。
实际上,这是子集反演的一种形式。当我们将 \(g\) 看作至多,\(f\) 看作恰好时,这个式子会起很大的作用。
思考
容斥可以对于一些限制,将恰好转变成至少来放宽一些条件,以及后面反演中将涉及的 \(\min\) 和 \(\max\) 的转化。