概述
容斥原理是非常重要的计数原理:
i=1⋃nSi=m=1∑n(−1)m−1ai<ai+1∑i=1⋂mSai
集合的交集可以使用补集容斥原理来求解:
i=1⋂nSi=∣U∣−i=1⋃nSi
容斥原理最经典的用处是“至少”与“恰好”之间的转化,实际上是一个子集反演的过程。子集反演是针对集合交并的容斥,可以在恰好是某个集合和至多/至少是这个集合反演。
我们先来看与至多是这个集合的反演。现在有其元素满足某种条件的集合 A。定义 f(S) 代表 S=A 时的答案,g(S) 代表 S⊆A 时的答案。
钦定选了 S 这个集合中的子集 T,有 g(S)=∑T⊆Sf(T),这时有 f(S)=∑T⊆S(−1)∣S∣−∣T∣g(T)。使用容斥原理不难感性理解。
类似的,如果 f(S) 代表 S=A 时的答案,g(S) 表示 A⊆S 时的答案,有 g(S)=∑S⊆Tf(T),反演得 f(S)=∑S⊆T(−1)∣T∣−∣S∣g(T)。
这是容斥原理的代数形式,它是我们用容斥原理解决问题的基础。因为在钦定时,一个“有两个元素满足条件”的东西会在“至少有一个元素满足条件”的东西计算时计算两次,也就因此成了一个子集反演的形式。