容斥计数 笔记&例题

容斥计数 笔记&例题


内容

主要就是容斥原理和二项式反演。

容斥原理

\(A_1,A_2,...,A_n\) 是集合 \(S\) 的子集,表示以集合 \(S\) 代表可能发生的事件的 \(n\) 个子事件, \(|A_i|\) 表示子事件 \(A_i\) 发生的次数 \((0 < i \le n)\) ,则有:

\[| A_1 \cup A_2 \cup ... \cup A_n | \\ = \sum_{i=1}^n | A_i | - \sum_{1 \le i < j \le n} | A_i \cap A_j | + ... + (-1)^{n-1}| A_1 \cap A_2 \cap ... \cap A_n | \\ = \sum_{m=1}^n (-1)^{m-1} \sum_{a_i<a_{i+1}} | \bigcap_{i=1}^{m} S_{a_i} | \]

容斥原理通常和补集配合使用。

二项式反演

有四种常见的形式:

  • \[G(n) = \sum_{i=0}^n {n\choose i} F(i) \Leftrightarrow F(n) = \sum_{i=0}^n (-1)^{n-i} {n\choose i} G(i) \]

  • \[G(n) = \sum_{i=0}^n (-1)^i {n\choose i} F(i) \Leftrightarrow F(n) = \sum_{i=0}^n (-1)^i {n\choose i} G(i) \]

  • \[G(n) = \sum_{i\ge n} {i\choose n} F(i) \Leftrightarrow F(n) = \sum_{i\ge n} (-1)^{i-n} {i\choose n} G(i) \]

  • \[G(n) = \sum_{i=n}^m {m\choose i} F(i) \Leftrightarrow F(n) = \sum_{i=n}^m (-1)^{m-i} {m\choose i} G(i) \]

不过这只是最表面的形式,有很多时候反演系数会被包含在 \(f,g\) 中。

例题

P2567 [SCOI2010] 幸运数字 - 洛谷 (luogu.com.cn)

这题就是爆搜剪枝容斥,比较简单。

相关的还有“Cirno 的完美算数教室”这一题,代码中只用修改两个数字,其余都一样。

P2260 [清华集训 2012] 模积和 - 洛谷 (luogu.com.cn)

这个主要就是体现一个“求补集”的思想。

不相交路径 - 题目详情 - Hydro

法 1

这题是在一个 DAG 上,所以我们处理出从每个点到每个点的路径方案数,记为 \(f_{u,v}\)

然后我们考虑对答案取补集:计算相交的部分,从总方案数中减去。

那么为了不让相交的部分重复计算,我们固定第一次相交的点,那么容斥计算即可。

法 2

这个容易想到 LGV 定理,那么答案就是 \(f_{a,c}f_{b,d}-f_{a,d}f_{b,c}\)

P10593 BZOJ2958 序列染色 - 洛谷 (luogu.com.cn)

这题是一个 DP,用到了取补集来优化。

P2516 [HAOI2010] 最长公共子序列 - 洛谷 (luogu.com.cn)

这题是一个比较简单的容斥 DP。

P3160 [CQOI2012] 局部极小值 - 洛谷 (luogu.com.cn)

一个容斥题目,我们考虑不管 . 的点会不会变成 X,只钦定有哪些会变成 X,然后按个数容斥即可,具体方案数用状压 DP 来求。

P10596 BZOJ2839 集合计数 - 洛谷 (luogu.com.cn)

这个就是一个直接计算然后套二项式反演的板子。

P10598 BZOJ2162 男生女生 - 洛谷 (luogu.com.cn)

这题分两问,第一问是网络流,第二问是一个高维二项式反演板子。

P10597 BZOJ4665 小 w 的喜糖 - 洛谷 (luogu.com.cn)

多重集的错排。这里先假设所有糖本质不同,然后根据这个性质来 DP,再二项式反演,最后乘上阶乘即可。

在 DP 方面,我们开一个二维的 \(f_{i,j}\) 表示前 \(i\) 中糖至少有 \(j\) 人不变的情况数,然后转移即可。

P2167 [SDOI2009] Bill的挑战 - 洛谷 (luogu.com.cn)

暴力容斥

posted @ 2025-06-13 20:41  Add_Catalyst  阅读(11)  评论(0)    收藏  举报