基本容斥小记

参考了 这篇


基本模型与技巧

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

原文地址:https://www.cnblogs.com/tztqwq/p/14117250.html