子集容斥与二项式反演

子集容斥与二项式反演学习笔记

子集容斥

公式:

\[\begin{align*} g(S)&=\sum\limits_{T\subseteq S}f(T)\\ f(S)&=\sum\limits_{T\subseteq S}(-1)^{\left|S\right|-\left|T\right|}g(T) \end{align*} \]

证明:

\[\begin{align*} &\sum\limits_{T\subseteq S}(-1)^{\left|S\right|-\left|T\right|}g(T)\\ =&\sum\limits_{T\subseteq S}(-1)^{\left|S\right|-\left|T\right|}\sum\limits_{R\subseteq T}f(R)\\ =&\sum\limits_{R\subseteq T}f(R)\sum\limits_{R\subseteq T\subseteq S}(-1)^{\left|S\right|-\left|T\right|} \end{align*} \]

\(R=S\),则 \(\sum\limits_{R\subseteq T\subseteq S}(-1)^{\left|S\right|-\left|T\right|}=1\)

二项式反演

公式:

\[\begin{align*} g_{i}&=\sum_{k\ge i}\dbinom{k}{i}f_k\\ f_{i}&=\sum_{k\ge i}\dbinom{k}{i}(-1)^{k-i}g_k \end{align*} \]

证明:

\[\begin{align*} &\sum_{k\ge i}\dbinom{k}{i}(-1)^{k-i}g_k\\ =&\sum_{k\ge i}\dbinom{k}{i}(-1)^{k-i}\sum_{j\ge k}\dbinom{j}{k}f_j\\ =&\sum_{j\ge i}f_j\sum_{i\le k \le j}\dbinom{k}{i}\dbinom{j}{k}(-1)^{k-i}\\ =&\sum_{j\ge i}f_j\sum_{i \le k \le j}\frac{k!}{i!(k-i)!}\frac{j!}{k!(j-k)!}(-1)^{k-i}\\ =&\sum_{j\ge i}f_j\frac{j!}{i!}\sum_{i \le k \le j}\frac{1}{(k-i)!(j-k)!}(-1)^{k-i}\\ =&\sum_{j\ge i}f_j\frac{j!}{i!(j-i)!}(1-1)^{k-i}\\ =&f_j \end{align*} \]

同理:

\[\begin{align*} g_i&=\sum_{k\le i}\dbinom{i}{k}f_k\\ f_i&=\sum_{k\le i}\dbinom{i}{k}(-1)^{i-k}g_k \end{align*} \]

例题:

黑暗前的幻想乡

题目大意:

给定一个无向图和每个公司能造的边,要求统计每个公司恰好建造一条边的生成树数量。

前置知识:

思路

在没有公司限制的情况下,我们只需要跑一边生成树计数即可(挖个坑)。在加上限制条件之后,我们可以考虑将参加建造的公司看成一个子集 \(s\),求出每个子集对应的生成树数量 \(f_s\) ,最后子集容斥即可。

posted @ 2023-07-19 12:03  mjsdnz  阅读(34)  评论(0编辑  收藏  举报