luogu
首先考慮暴力,很容易得出 $ f[ i ] = \sum\limits_^ ( -1 )^ \binom 2^ f[ i-j ] $ 。
相當於列舉度數為0的節點的個數,向不在這個集合裡的點任意連邊,之後需要容斥。
考慮如何優化。
$ j(i-j) = \frac } - \frac } - \frac } $ 。
$ f[ i ] = \sum\limits_^ ( -1 )^ \frac \frac )^ } } )^ } ( \sqrt )^ } } f[ i-j ] $ 。
構造 $ f(x) = \sum\limits_^ \frac }^ } } x^ , g(x) = \sum\limits_^ \frac }^ } } x^ $ ,
有 $ f( x ) = f( x )g( x ) + 1 $ ,直接求逆。
如果要求圖必須是弱連通呢?
直接對egf取ln就好。
#includeusing namespace std;
typedef long long lint;
namespace rkk
lint doadd(lint &a,lint b)
lint fpow(lint a,lint p)return ret;}
lint wg[n],iwg[n];int rev[n],lastlen;
inline void init()
inline void ntt(lint *a,int len,int tp)
void work(lint *f,lint *g,int n) }
}int n;
lint inv[n],fac[n],ifac[n];
void sieve(int n)
lint f[n],g[n],h[n];
int main()
poly::inv::work(g,f,len);//求出不保證聯通的
for(int i=0;ipoly::ln::work(f,h,len);
for(int i=1;i<=n;i++) printf("%lld\n",h[i]*fac[i]%mo);
return 0;}}
int main()
有標號的DAG計數I IV
最近心血來潮來寫一寫這個玩意兒。請特別注意定義生成函式時下標的起始位置。求 n 點帶標號 dag 的數量模 10007 n le5000 資料範圍顯然 o n 2 設 f i 表示答案,列舉 dag 中入度為零的點的數量 j 方案數為 binom ij 將圖拆成兩個部分,前 j 個點向後 i j 個...
有標號的DAG計數 II
給定一正整數n,對n個點有標號的有向無環圖 可以不連通 進行計數,輸出答案mod 998244353的結果 考慮 o n 2 dp 列舉出度為 0 的點,構成的新 dag 方案數為 f i f i 1 c 2 即從 n 個點中選出乙個點,作為出度為 0 的點,然後剩下 n 1 個點向這個點任意連邊 ...
題解 有標號的DAG計數3
我們已經知道了 f i 表示不一定需要聯通的 i 節點的dag方案,考慮合併 參考 題解 p4841 城市規劃 指數型母函式 多項式ln 然後答案 h i 母函式 h x 就這樣解 由於 h x sum dfrac 則 h x e 球 ln 就是iv,不求的話可以直接手動模擬 f x i i win...