参考了 这篇
基本模型与技巧
前置知识只有两个, 一个是基本的计数技巧, 在这里略去不提, 另一个是:\(\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}
\]