容斥复习
突然就一点容斥都不会了... 重学一下
错位1
题目大意: \(n\) 个人 \(n\) 个位置, 求恰有 \(0\) 个人站在自己编号上的方案数
做法:
好算的东西是 \(f[i] = \binom n i (n-i)!\)
\(f[i]\) 中还包含了一些 \(j\ge i\) 的方案.
我们给每个在 \(f[i]\) 时被算到的方案附上一个系数 \(coef[i]\)
注意到每个 \(j\) 的方案会被 \(i\) 附上 \(\binom j i\) 次系数.
而我们希望每个 \(j \neq 0\) 的方案被附上系数和为 \(0\), 反之为 \(1\) . 也就是说
这里 \(coef[i] = (-1)^i\)
错位2
题目大意: \(n\) 个人 \(n\) 个位置, 求恰有 \(k\) 个人站在自己编号上的方案数
做法:
沿用上题的思路
使用二项式反演得 \(coef[i] = (-1)^{i-k} \binom i k\)
求容斥系数的一些方法:
- 二项式反演
\(f(n) = \sum_{i=0}^n \binom n i g(i)\)
其中 \(g\) 为容斥系数, \(f\) 为我们希望每个位置被统计多少次, 那么
\(g(n) = \sum_{i=0}^n \binom n i g(i) [n-i=0]\)
\(g(n) = \sum_{i=0}^n \binom n i g(i) \sum_{j=0}^{n-i} \binom {n-i} j (-1)^j\)
\(g(n) = \sum_{j=0}^n \binom n j (-1)^j f(n-j)\)
\(g(n) = \sum_{j=0}^n \binom n j (-1)^{n-j} f(j)\)
1') 另一个方向的二项式反演
\(f(i) = \sum_{j=i}^n \binom j i g(j)\)
\(g(j) = \sum_{i=j}^n g(i) [i=j]\)
\(g(j) = \sum_{i=j}^n g(i) \sum_{k=j}^i (-1)^{k-j} \binom k j \binom i k\)
\(g(j) = \sum_{k=j}^n (-1)^{k-j} \binom k j f(k)\)
-
暴力打表
用逐项确定的方法.
其实本质是多项式求逆 -
附上一个组合数的表.
0 | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|
1 | -6 | ? | ? | ? | ? | ? |
1 | -5 | 15 | ? | ? | ? | ? |
1 | -4 | 10 | -20 | ? | ? | ? |
1 | -3 | 6 | -10 | 15 | ? | ? |
1 | -2 | 3 | -4 | 5 | -6 | ? |
1 | -1 | 1 | -1 | 1 | -1 | 1 |
1 | 1 | |||||
1 | 2 | 1 | ||||
1 | 3 | 3 | 1 | |||
1 | 4 | 6 | 4 | 1 | ||
1 | 5 | 10 | 10 | 5 | 1 | |
1 | 6 | 15 | 20 | 15 | 6 | 1 |
bzoj 黑暗的幻想乡
题目大意: \(n\le 17\) 个点, 若干条边, 每条边颜色为 \([1, n-1]\). 求每种颜色都恰好出现一次的生成树个数
做法:
暴力枚举每个颜色子集, \(f[s]\) 为只连 \(s\) 中的颜色的边进行 Matrix-tree计数 的结果
\(s\) 会给它的每个子集附上容斥系数
我们希望 $$[s=mask] = \sum_{s\subseteq t} coef[t]$$
\(coef[t] = (-1)^{|mask| - |t|}\)
前夕
题目大意:
\(n \le 10^7\), 有 \(0\cdots 2^n-1\) 这么些二进制数
要在里面选若干个, 使得交的大小为 \(L(L\le 4)\) 的倍数, 求方案数
做法:
\(f[i] = \binom n i 2^{2^{n-i}}\)
会包含 \(j\ge i\) 的情况, 每个被算 \(\binom j i\) 次
跟之前的 错位2 一样, 要求恰好 \(k\) 时的容斥系数为 \(coef[i] = (-1)^{i-k} \binom i k\)
这题我们要求 \(L|k\) 的所有 \(k\) 的和, 因此容斥系数为 \(coef[i] = (-1)^i \sum_{L|k} (-1)^{-k} \binom i k\)
\(\bmod x^L\) 意义下求 \((1-x)^i\) 即可, 可以递推
同色段
题目大意: \(c\) 个颜色, \(n\) 个位置, 求同色段数恰为 \(k\) 的填色方案数
做法:
\(f[i] = \binom {n-1}{i-1} c^i\)
这会包含 \(j \le i\) 的情况, 每个被算 \(\binom {n-j}{i-j}\) 次
需要满足等式为 $$[j=k] = \sum_{i=j}^n \binom {n-j}{i-j} coef[i]$$
\(coef[i] = (-1)^{k-i} \binom {n-i}{k-i}\)
2017山东一轮集训 苹果树
具体见 我2017山东一轮集训的博客.
主要是这题的容斥系数等式跟上题很像, 写出来对比一下
\(coef[i] = (-1)^{i-k} \binom{n-k}{i-k}\)
联通块
题目大意: \(n \le 12\) 个点, 求恰好 \(k\) 个联通块的图的个数
做法:
Bell数枚举划分, 要求划分之间没有连边, 其他乱连.
对于划分 \(i\) , 可能导致继续划分, 成为 \(j\) , 每个 \(j\) 被算重 \(\begin{Bmatrix}|j|\\|i|\end{Bmatrix}\) 种
\(coef[i] = (-1)^{i-k} \begin{bmatrix} i \\ k \end{bmatrix}\)
同色段2
题目大意:
\(n\) 种数字, 第 \(i\) 种数字有 \(c_i\) 个.
求用完所有数字的所有方案中, 同色段长度的乘积 的和是多少
做法:
之前的题都是 "方案数". 带上权值之后有两种方法:
- 保证每种方案在不同地方都以正确的权值被统计
- 把权值附在容斥系数等式上
这题用方法2
先 \(dp\) 预处理出 \(sp[x][i]\) 为将第 \(x\) 种数字分成 \(i\) 段时的段长乘积
考虑记 \(i_x\) 为 \(x\) 这种数字分成了多少段.
\((i_1, \cdots i_n)\) 为一种可能的分段方法, 多项式系数把所有数字的段插起来
这样会包含 \((j_1\le i_1, \cdots, j_n\le i_n)\) 的划分方案, 记重次数为插板
独立出来就是 \([j=k] \times sp[k] = \sum_{i=j}^n \binom {i-1}{j-1} coef[i]\)
\(coef[i] = (-1)^{k-i} \binom{k-1}{i-1} sp[k]\)
因为这题不是求 "恰好", 我们把对于每个 \(k\) 的容斥系数累加起来即可.