容斥复习

突然就一点容斥都不会了... 重学一下

错位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\) . 也就是说

\[[j=0] = \sum_{i\le j} \binom j i coef[i] \]

这里 \(coef[i] = (-1)^i\)

错位2

题目大意: \(n\) 个人 \(n\) 个位置, 求恰有 \(k\) 个人站在自己编号上的方案数

做法:
沿用上题的思路

\[[j=k] = \sum_{i \le j} \binom j i coef[i] \]

使用二项式反演得 \(coef[i] = (-1)^{i-k} \binom i k\)

求容斥系数的一些方法:

  1. 二项式反演
    \(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)\)

  1. 暴力打表
    用逐项确定的方法.
    其实本质是多项式求逆

  2. 附上一个组合数的表.

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山东一轮集训的博客.
主要是这题的容斥系数等式跟上题很像, 写出来对比一下

\[[j=k] = \sum_{i=0}^{j} \binom {n-i}{j-i} coef[i] \]

\(coef[i] = (-1)^{i-k} \binom{n-k}{i-k}\)

联通块

题目大意: \(n \le 12\) 个点, 求恰好 \(k\) 个联通块的图的个数

做法:
Bell数枚举划分, 要求划分之间没有连边, 其他乱连.
对于划分 \(i\) , 可能导致继续划分, 成为 \(j\) , 每个 \(j\) 被算重 \(\begin{Bmatrix}|j|\\|i|\end{Bmatrix}\)

\[[j=k] = \sum_{i=0}^j \begin{Bmatrix}j\\i\end{Bmatrix} coef[i] \]

\(coef[i] = (-1)^{i-k} \begin{bmatrix} i \\ k \end{bmatrix}\)

同色段2

题目大意:
\(n\) 种数字, 第 \(i\) 种数字有 \(c_i\) 个.
求用完所有数字的所有方案中, 同色段长度的乘积 的和是多少

做法:
之前的题都是 "方案数". 带上权值之后有两种方法:

  1. 保证每种方案在不同地方都以正确的权值被统计
  2. 把权值附在容斥系数等式上
    这题用方法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)\) 的划分方案, 记重次数为插板

\[\prod_{x=1}^n [j_x=k_x] \times sp[x][j_x] = \sum_{i_1 \ge j_1, \cdots i_n \ge j_n} \prod_{x=1}^n \binom {i_x-1}{j_x-1} coef[i_x] \]

独立出来就是 \([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\) 的容斥系数累加起来即可.

posted @ 2018-07-11 14:42  _zwl  阅读(288)  评论(0编辑  收藏  举报