前言
覆盖知识点感觉比较广,有空了可以开专题板刷一下每个小点。由于内容实在太多了,估计也要咕咕很久……
主讲人:@feecle6418。
容斥计数
二项式反演
笔记:[Notes] 容斥&反演。当时脑子不大好使,推导证明里相当脑残的步骤也单拆出来了。
有一些题目的计数不一定完全符合二项式反演的式子,此时可以考虑改换状态使其符合二项式反演式或者推导当前演绎式的反演系数。
如果以上两者都行不通,说明应该考虑容斥以外的方法。
Balence Scale
不如 Amusement Park。
首先考虑不存在 =
的情况,此时即为给每条边重定向的 DAG 计数。
DAG 计数优先考虑拓扑序分层图。设 \(F(S)\) 表示点集 \(S\) 的导出子图为 DAG 的方案数量,每次考虑加入一个入度为 \(0\) 的点独立集 \(T\),\(s,t\) 分别为集合 \(S,T\) 的大小,列式子:
\[F(S)=\sum_{T\subseteq S\vee T\not=\varnothing\vee[T\text{ is independent}]}\Delta(s,t)\cdot F(S\backslash T)
\]
\(\Delta(s,t)\) 为容斥系数,接下来只用考虑如何求解 \(\Delta(s,t)\) 即可。
考察算重的原因,发现独立集的子集依然是独立集,此时贡献会发生重复,根据组合意义,\(\Delta(s,t)\) 满足的式子十分明确:
\[\sum_{1\leq k\leq t\leq s}\Delta(s,t)\cdot\binom{t}{k}=1
\]
这和空集判别式只相差了一项,可以直接由空集判别式推出 \(\Delta(s,t)=(-1)^{t+1}\) 满足以上式子。
因此有:
\[F(S)=\sum_{T\subseteq S\vee T\not=\varnothing\vee[T\text{ is independent}]}(-1)^{|T|+1}\cdot F(S\backslash T)
\]
直接 \(\text{dp}\) 即可。
再考虑存在 =
时的情况,此时直接任意地枚举一个入度为 \(0\) 的集合,其中的连通块可以看作其中的边均为 =
,可以直接缩成一个点,套进上述的式子中求解即可。即:
\[F(S)=\sum_{T\subseteq S\vee T\not=\varnothing}(-1)^{cnt(T)+1}\cdot F(S\backslash T)
\]
其中 \(cnt(T)\) 表示集合 \(T\) 中的连通块数量。