DAG 计数

以下方法都是按照这个套路:
考虑一个不一定连通的 DAG ,你枚举一些零度点(拓扑序第一层)集合 \(S\),这些点之间不能连边,这些点跟剩下点(点集为 \(T\),\(|S| \cup |T| = |V|\))的连边只能由 \(S \rightarrow T\)\(T\) 是一个 DAG。
但这样算会重复,因为没有考虑到其他 \(T\) 中的零度点,会算重,然而显然是二项式的容斥形式,带上容斥系数 \((-1)^{|S|+1}\) 即可。

有标号 DAG 图计数(不要求连通)

\(n\le 200000\)

Sol

根据上述即 \(f(n)=\sum_{i=1}^n (-1)^{i+1} {n\choose i}f(n-i)2^{i(n-i)}\),多项式求逆可以做到 \(O(nlogn)\)

有标号 DAG 图计数(要求弱连通)

\(n\le 200000\)

Sol

根据集合与划分的关系设不一定连通的 DAG 的 EGF 为 F,设连通的 DAG 的 EGF 为 G,\(F=e^G\rightarrow G=\ln(F)\)

DAG 子图计数

给定 \(m\) 条边,每条边各有 \(\frac{1}{3}\) 的概率 \(u \rightarrow v\)\(v \rightarrow u\) 或断开。
求这个图是 DAG 的概率,无重边无自环。

\(n\le 20,m\le n^2\)

Sol

状压 DP,\(dp_S=\sum_{T\subset S,T\ne \varnothing} (-1)^{|T|+1} dp_{S-T} P_1(S) P_2(S\rightarrow T)\),两个概率的式子都很容易写出来。
可以用子集卷积优化到 \(O(n^22^n)\)

DAG 子图计数

你有一个 \(n\) 个节点的有向图,我们称一个合法的方案是将其中一些边的方向翻转之后使得剩下的图无环。
对于所有合法的方案,将方案中翻转方向的边的数量求和。

\(n\le 20\)

Sol

注意一个方案倒转后依然合法,那么这两个图的贡献和为 \(m\),我们可以直接计数 DAG 的数目。
状压 DP, 枚举第一层点转移,子集卷积优化 \(O(n^22^n)\)

posted @ 2019-09-25 10:55  bestwyj  阅读(1369)  评论(3编辑  收藏  举报