容斥原理学习笔记

公式

并集

$$\left|\bigcup_{i=1}^nS_i\right|=\sum_i|S_i|-\sum_{i<j}|S_i\cap S_j|+\sum_{i<j<k}|S_i\cap S_j\cap S_k|-\cdots+(-1)^{n-1}|S_1\cap \cdots\cap S_n|$$

 证明

对于元素$x$,假设它属于的集合为$T_1,T_2,\ldots,T_m$,那么它对答案的贡献为:

$$|\{T_i\}|-|\{T_i\cap T_j|i<j\}|+|\{T_i\cap T_j\cap T_k|i<j<k\}|-\cdots+(-1)^{m-1}|\{T_1\cap T_2\cap \cdots\cap T_m\}|\\=\binom{m}{1}-\binom{m}{2}+\cdots+(-1)^{m-1}\binom{m}{m}=1$$

于是每个元素都只被计算了一次,总和即为并集的大小

 

交集

$$\left|\bigcap_{i=1}^nS_i\right|=|U|-\left|\bigcup_{i=1}^n\overline{S_i}\right|$$

其中$U$为全集,$\overline{S}$为$S$对$U$的补集

计算时可对右边补集的并进行容斥

证明

若$x\in\bigcup\overline{S_i}$,则$\exists i,x\notin S_i$,即$x$不存在与交集中,贡献为0,反之贡献为1

于是最后总和为交集的大小

例题

错排问题

求出满足以下条件的长度为$n$的排列$p$的个数:$\forall i,p_i\neq i$

解法

考虑容斥:
设$S_i$表示满足$p_i\neq i$的排列$p$的集合,那么题目要求的是$|\bigcap S_i|$

根据公式:

$$Ans=\left|\bigcap_{i=1}^nS_i\right|=|U|-\left|\bigcup_{i=1}^n\overline{S_i}\right|\\=|U|-\sum_i|\overline{S_i}|+\sum_{i<j}|\overline{S_i}\cap\overline{S_j}|-\cdots-(-1)^{n-1}|\overline{S_1}\cap \cdots\cap\overline{S_n}|$$

注意到:

$$\forall a_1<a_2<\cdots<a_m,\left|\bigcap_{i=1}^m\overline{S_{a_i}}\right|=(n-m)!$$

于是:

$$Ans=\sum_{m=0}^n(-1)^m\sum_{a_i<a_2<\cdots<a_m}\left|\bigcap_{i=1}^m\overline{S_{a_i}}\right|=\sum_{i=0}^n(-1)^i\binom{n}{i}(n-i)!=n!\sum_{i=0}^n\frac{(-1)^i}{i!}$$

那么就可以愉快的$O(n)$求了

方格染色问题:

有一个n行m列的方格,初始均为白色,可以选择一些格子染黑,问满足每行每列至少有一个黑格子的方案数

解法

和上题思路差不多,先求出至少有$i$行$j$列没有黑格子的方案数,为$2^{(n-i)(m-j)}$

根据容斥原理:

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

效率$O(n^2)$

猜你喜欢

转载自www.cnblogs.com/Y25t/p/12237303.html