参考了 这篇
基本模型与技巧
前置知识只有两个, 一个是基本的计数技巧, 在这里略去不提, 另一个是:(sumlimits_{i=0}^n (-1)^i dbinom{n}{i}=[n=0]), 这个证明的话就看一下杨辉三角一行里上一行成分的构成(依据 (inom nm = inom{n-1}{m}+inom{n-1}{m-1})), 会发现不同列分奇偶加起来是一样的。
并集转交集
本蒻记忆中第一个接触的容斥就是它了, 著名的奇加偶减, 一般使用时设 (S_i) 表示满足条件 (i) 的集合。
[|igcup_{i=1}^n S_i| = sum_{i=1}^n (-1)^{i+1} sum_{1le a_1<cdots<a_ile n}|igcap_{j=1}^i S_{a_i}| ag{1}
]
证明:对于一个元素, 假设其出现在 (S_1,S_2cdots,S_m), 其对右式的贡献为:
[cnt = |{S_i}| - |{S_icap S_jmid 1le i<jle m }| + cdots
\
= sum_{i=1}^m (-1)^{i+1} inom{m}{i}
\
= inom{m}{0}-sum_{i=0}^m (-1)^i inom{m}{i}
\
= 1 -[m=0]
\
=1
]
至于最后一步,是因为 (mge 1)。
这个著名的式子 ((1)) 还可以写成如下形式,更为简洁:
[|igcup_{i=1}^n S_i| = sum_{Isubseteq [n],I
eq varnothing} (-1)^{|I|+1} |igcap_{iin I}S_i|
]
交集转并集/取反的并集/取反的交集
依然是奇加偶减。
[|igcap_{i=1}^n S_i| = sum_{i=1}^n (-1)^{i+1}sum_{1le a_1<cdots<a_ile n}|igcup_{j=1}^i S_{a_i}| ag{2}
]
证明依旧, 对于一个出现在所有集合里的元素, 其对右式的贡献为:
[sum_{i=1}^n (-1)^{i+1}inom{n}{i}
\
= 1-[n=0]
\
=1
]
对于一个出现在 (S_1,cdots,S_m) 里的元素((m<n)),其对右式的贡献为:
[sum_{i=1}^n (-1)^{i+1}inom{n}{i} - sum_{i=1}^{m-n}(-1)^{i+1}inom{m-n}{i}
\
=1-1
\
=0
]
也就是把这类元素先当作出现在所有集合里, 再减去那些本不应有的贡献。
同样地, 式子 ((2)) 可以写成:
[|igcap_{i=1}^n S_i| = sum_{Isubseteq [n],I
eq varnothing} (-1)^{|I|+1} |igcup_{iin I}S_i|
]
将交集转化成并集的另一个式子是:
[|igcap_{i=1}^nS_i|=|U|-|igcup_{i=1}^noverline{S_i}| ag{3}
]
证明:组合意义,不是全满足的,就必定不满足至少一项。
这个通常结合式子 ((1)) 进行应用, 即:
[|igcup_{i=1}^noverline{S_i}| = sum_{Isubseteq [n],I
eq varnothing} (-1)^{|I|+1} |igcap_{iin I}overline{S_i}|
\
|igcap_{i=1}^nS_i| = |U|+sum_{Isubseteq [n],I
eq varnothing} (-1)^{|I|} |igcap_{iin I}overline{S_i}|
]
若是认同 (I = varnothing) 的时候后面那个交集的大小就是全集, 那么这个式子可以直接写成这样:
[|igcap_{i=1}^nS_i| = sum_{Isubseteq [n]} (-1)^{|I|} |igcap_{iin I}overline{S_i}| ag{4}
]
基本例题
[COCI2009-2010#6] XOR
设第 (i) 个三角形为 (S_i), 答案就是 (|Xor_{i=1}^n S_i|)。
我是没怎么想到容斥, 但是这个可以用容斥做,不过倒是可以大概地猜到用容斥做的话大概率转换成交集。
那么枚举交集:(sumlimits_{Isubseteq [n],I
eq varnothing}nanachi* |igcaplimits_{iin I} S_i|) , 那么就要有一个系数 (nanachi), 那么 (nanachi) 的性别是什么呢?
显然对于一个属于 (x) 个集合的元素的贡献是 ([2
mid x]), 设 (id(x)) 为 (x) 个集合的容斥系数,那么由于使用的是交集, 所以这个元素的贡献实际上是:
[sum_{i=1}^xinom xi id(i) = [2
mid x]
]
若是令 (id(0)=0),那么利用二项式反演可以得到:
[sum_{i=0}^xinom xi id(i) = [2
mid x]
\
id(x)=sum_{i=0}^x (-1)^{x-i}inom xi [2
mid i]=sum_{i=0}^x (-1)^{x+i}inom xi [2
mid i]= (-1)^xsum_{i=0}^x (-1)^{i}inom xi [2
mid i]
\
= (-1)^{x+1}sum_{i=0}^{x} (-1)^{i+1}inom xi [2
mid i]
\
= (-1)^{x+1}2^{x-1}
]