以下方法都是按照這個套路:
考慮一個不一定連通的 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)\)