奇怪的基础容斥数学课件

子集反演

一般有一个很套路的方法。

比如现在有一个全集条件集合 \(U\),现在要求恰好 \(S\) 集合满足,\(U-S\) 集合不满足的方案数,设其为 \(f_S\),然而这个并不能直接算出。有一个比较好算的东西是,钦定 \(T\) 集合满足,不管 \(U-T\) 集合是否满足的方案数,设其为 \(g_T\)

显然有 \(g_S=\sum\limits_{S \subseteq T} f_T\),然后我们可以根据子集反演得到 \(f_S=\sum \limits_{S \subseteq T} g_T(-1)^{|T|-|S|}\),这样的话就可以算出要求的方案数了。

这个玩意正确的原因是这样的:可以直接把前一个式子代入后一个式子,会得到
\(f_S=\sum \limits_{S \subseteq T} \sum \limits_{T \subseteq Z}f_Z (-1)^{|T|-|S|}\)
\(=\sum \limits_{S\subseteq Z}f_Z\sum \limits_{S \subseteq T,T \subseteq Z} (-1)^{|T|-|S|}\)
\(=\sum \limits_{S\subseteq Z}f_Z\sum \limits_{T \subseteq Z-S} (-1)^{|T|}\)
\(=\sum \limits_{S\subseteq Z}f_Z[S=Z]=f_S\)

小星星

这题中的限制实际上就是:

  1. \(n\) 个点均出现在用来编号的排列中。
  2. 相邻的编号存在边。

所以考虑这样一个做法,首先将排列这个限制去掉,转化为任意编号。

钦定集合 \(S\) 可以出现在编号序列中,然后做一个简单的树形 \(dp\) 来统计这样的方案数 \(g_S\)

套用上面的式子,现在求的就是 \(f_U\) ,有 \(ans=\sum \limits_{S} g_S (-1)^{|U|-|S|}\)

Ribbons on Tree

要求每条边都能被至少一条路径覆盖。

其实只需要钦定若干条边没有被覆盖,这样就会形成若干个联通块。

对于一个节点数为 \(n\) 的联通块,不需要保证联通块内的边都被覆盖,所以任意匹配的方案数就是 \([2|n] (n-1)!!\)

答案就是对所有钦定的边集对应的方案数乘上容斥系数求和,这个东西只要记一下这个联通块已经放了多少个点,写一个 \(O(n^2)\) 的树形 \(\text{dp}\) 就可以解决,解题的思想就是用 \(\text{dp}\) 来优化子集反演中暴力枚举条件集合的过程。

二项式反演

这个东西就与子集反演比较类似了,一般应用于现在的条件集合与具体哪些没有关系,而只与集合大小有关。

同样钦定若干个条件满足,设为 \(g_i\),将恰好的方案数设为 \(f_i\),有 \(g_i=\sum \limits_{i \leq k}f_k\binom{k}{i}\)
然后根据二项式反演可以得到 \(f_i=\sum \limits_{i \leq k}g_k\binom{k}{i}(-1)^{k-i}\)

同样用代入的方法证明,将前一个式子代入后一个。
\(f_i=\sum \limits_{i \leq k}\sum \limits_{k \leq j}f_j\binom{j}{k}\binom{k}{i}(-1)^{k-i}\)
\(=\sum \limits_{i \leq j}f_j \sum \limits_{i \leq k \leq j}\binom{j}{k}\binom{k}{i}(-1)^{k-i}\)
\(=\sum \limits_{i \leq j}f_j \sum \limits_{i \leq k \leq j}\binom{j}{i}\binom{j-i}{k-i}(-1)^{k-i}\)
\(=\sum \limits_{i \leq j}f_j \binom{j}{i} \sum \limits_{k=0}^{j-i}\binom{j-i}{k}(-1)^k\)
\(=\sum \limits_{i \leq j}f_j \binom{j}{i} (1-1)^{j-i}=f_i\)

集合计数

一个有 \(n\) 个元素的集合有 \(2^n\) 个不同子集(包含空集)。

现在要在这 \(2^n\) 个集合中取出至少一个集合,使得它们的交集的元素个数为 \(k\) ,求取法的方案数。

\(1 \leq n \leq 10^6 ,0 \leq k \leq n\)

要求的是交集大小恰好为 \(k\) ,设为 \(f_k\),有一个容易算出的东西是钦定交集大小至少为 \(k\),设为 \(g_k\),有 \(g_k=\binom{n}{k} (2^{2^{n-k}}-1)\)

\(g_k=\sum \limits_{i \geq k} \binom{i}{k}f_i\)

所以可以套用二项式反演的式子得到 \(f_k=\sum \limits_{i \geq k}\binom{i}{k}(-1)^{i-k}g_i\)

七选五

\(f_i\) 表示至少 \(i\) 个元素放在对应位置的方案数,\(g_i\) 表示恰好 \(i\) 个元素放在对应位置的方案数,有 \(f_i = \sum \limits_{j=i}^n g_j \binom{j}{i}, f_i = \binom{k}{i} \binom{n-i}{k-i}(k-i)!\)

反演一下就有 \(g_i = \sum \limits_{j=i}^n f_j \binom{j}{i}(-1)^{j-i}\),这个就是答案了,这道题的 \(n=k,x=0\) 算是经典的错排问题。

posted @ 2020-06-22 17:54  skyh  阅读(475)  评论(4编辑  收藏  举报