Loading [MathJax]/extensions/TeX/mathchoice.js

基本容斥小记

参考了 这篇


基本模型与技巧

前置知识只有两个, 一个是基本的计数技巧, 在这里略去不提, 另一个是:\sum\limits_{i=0}^n (-1)^i \dbinom{n}{i}=[n=0], 这个证明的话就看一下杨辉三角一行里上一行成分的构成(依据 \binom nm = \binom{n-1}{m}+\binom{n-1}{m-1}), 会发现不同列分奇偶加起来是一样的。

并集转交集

本蒻记忆中第一个接触的容斥就是它了, 著名的奇加偶减, 一般使用时设 S_i 表示满足条件 i 的集合。

|\bigcup_{i=1}^n S_i| = \sum_{i=1}^n (-1)^{i+1} \sum_{1\le a_1<\cdots<a_i\le n}|\bigcap_{j=1}^i S_{a_i}| \tag{1}

证明:对于一个元素, 假设其出现在 S_1,S_2\cdots,S_m, 其对右式的贡献为:

cnt = |\{S_i\}| - |\{S_i\cap S_j\mid 1\le i<j\le m \}| + \cdots \\ = \sum_{i=1}^m (-1)^{i+1} \binom{m}{i} \\ = \binom{m}{0}-\sum_{i=0}^m (-1)^i \binom{m}{i} \\ = 1 -[m=0] \\ =1

至于最后一步,是因为 m\ge 1

这个著名的式子 (1) 还可以写成如下形式,更为简洁:

|\bigcup_{i=1}^n S_i| = \sum_{I\subseteq [n],I\neq \varnothing} (-1)^{|I|+1} |\bigcap_{i\in I}S_i|

交集转并集/取反的并集/取反的交集

依然是奇加偶减。

|\bigcap_{i=1}^n S_i| = \sum_{i=1}^n (-1)^{i+1}\sum_{1\le a_1<\cdots<a_i\le n}|\bigcup_{j=1}^i S_{a_i}| \tag{2}

证明依旧, 对于一个出现在所有集合里的元素, 其对右式的贡献为:

\sum_{i=1}^n (-1)^{i+1}\binom{n}{i} \\ = 1-[n=0] \\ =1

对于一个出现在 S_1,\cdots,S_m 里的元素(m<n),其对右式的贡献为:

\sum_{i=1}^n (-1)^{i+1}\binom{n}{i} - \sum_{i=1}^{m-n}(-1)^{i+1}\binom{m-n}{i} \\ =1-1 \\ =0

也就是把这类元素先当作出现在所有集合里, 再减去那些本不应有的贡献。

同样地, 式子 (2) 可以写成:

|\bigcap_{i=1}^n S_i| = \sum_{I\subseteq [n],I\neq \varnothing} (-1)^{|I|+1} |\bigcup_{i\in I}S_i|

将交集转化成并集的另一个式子是:

|\bigcap_{i=1}^nS_i|=|U|-|\bigcup_{i=1}^n\overline{S_i}| \tag{3}

证明:组合意义,不是全满足的,就必定不满足至少一项。

这个通常结合式子 (1) 进行应用, 即:

|\bigcup_{i=1}^n\overline{S_i}| = \sum_{I\subseteq [n],I\neq \varnothing} (-1)^{|I|+1} |\bigcap_{i\in I}\overline{S_i}| \\ |\bigcap_{i=1}^nS_i| = |U|+\sum_{I\subseteq [n],I\neq \varnothing} (-1)^{|I|} |\bigcap_{i\in I}\overline{S_i}|

若是认同 I = \varnothing 的时候后面那个交集的大小就是全集, 那么这个式子可以直接写成这样:

|\bigcap_{i=1}^nS_i| = \sum_{I\subseteq [n]} (-1)^{|I|} |\bigcap_{i\in I}\overline{S_i}| \tag{4}


基本例题

[COCI2009-2010#6] XOR

设第 i 个三角形为 S_i, 答案就是 |Xor_{i=1}^n S_i|

我是没怎么想到容斥, 但是这个可以用容斥做,不过倒是可以大概地猜到用容斥做的话大概率转换成交集。

那么枚举交集:\sum\limits_{I\subseteq [n],I\neq \varnothing}nanachi* |\bigcap\limits_{i\in I} S_i| , 那么就要有一个系数 nanachi, 那么 nanachi 的性别是什么呢?

显然对于一个属于 x 个集合的元素的贡献是 [2\nmid x], 设 id(x)x 个集合的容斥系数,那么由于使用的是交集, 所以这个元素的贡献实际上是:

\sum_{i=1}^x\binom xi id(i) = [2\nmid x]

若是令 id(0)=0,那么利用二项式反演可以得到:

\sum_{i=0}^x\binom xi id(i) = [2\nmid x] \\ id(x)=\sum_{i=0}^x (-1)^{x-i}\binom xi [2\nmid i]=\sum_{i=0}^x (-1)^{x+i}\binom xi [2\nmid i]= (-1)^x\sum_{i=0}^x (-1)^{i}\binom xi [2\nmid i] \\ = (-1)^{x+1}\sum_{i=0}^{x} (-1)^{i+1}\binom xi [2\nmid i] \\ = (-1)^{x+1}2^{x-1}

posted @   xwmwr  阅读(82)  评论(0编辑  收藏  举报
编辑推荐:
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
阅读排行:
· 为DeepSeek添加本地知识库
· 精选4款基于.NET开源、功能强大的通讯调试工具
· DeepSeek智能编程
· 大模型工具KTransformer的安装
· [计算机/硬件/GPU] 显卡
点击右上角即可分享
微信分享提示