有標號的DAG計數I IV

2022-04-28 19:48:12 字數 2282 閱讀 7180

最近心血來潮來寫一寫這個玩意兒。

請特別注意定義生成函式時下標的起始位置。

求\(n\)點帶標號\(dag\)的數量模\(10007\)。\(n\le5000\)。

資料範圍顯然\(o(n^2)\)。設\(f_i\)表示答案,列舉\(dag\)中入度為零的點的數量\(j\),方案數為\(\binom ij\),將圖拆成兩個部分,前\(j\)個點向後\(i-j\)個點的連邊任意,方案數為\(2^\),後\(j\)個點構成一張\(dag\),方案數為\(f_\)。

但是這樣並不保證入度為零的點只有\(j\)個,所以需要容斥。

\[f_i=\sum_^i(-1)^\binom ij2^f_

\]求\(n\)點帶標號\(dag\)的數量模\(998244353\)。\(n\le100000\)。

首先\(2^\)需要處理一下。需要想辦法把\(ij\)項去掉。

\(j(i-j)=\frac-\frac-\frac\)。

好在模\(998244353\)意義下存在\(2\)的二次剩餘。所以可以把原遞推式劃一劃。

\[f_i=\sum_^i(-1)^\frac\frac}\sqrt2^}f_

\]令\(f(x)=\sum_^n\frac}x^i,g(x)=\sum_^n\frac}}x^i\),

則有\(f(x)=g(x)f(x)+1\),故\(f(x)=\frac\)。

多項式求逆即可。

求\(n\)點帶標號\(dag\)的數量模\(10007\),要求圖弱連通。\(n\le5000\)。

首先還是把前面的\(f_i\)求出來,然後列舉某乙個點所在的弱連通\(dag\)大小,有遞推式:

\[g_i=f_i-\sum_^\binomf_jg_

\]求\(n\)點帶標號\(dag\)的數量模\(998244353\),要求圖弱連通。\(n\le100000\)。

劃一下式子:

\[\frac=\frac-\sum_^\frac\frac}

\]設\(f(x)=\sum_^n\fracx^i,g(x)=\sum_^n\fracx^i,h(x)=\sum_^n\fracx^i\),

則有\(g(x)=h(x)-f(x)g(x)\),故\(g(x)=\frac\)。

以上是方法一。

方法二非常地有趣。我們發現乙個帶標號的\(dag\)不要求弱連通實質上是由若干個弱連通\(dag\)構成的,我們設第二題答案的指數生成函式為\(f(x)\),第四題答案的指數生成函式為\(g(x)\),於是就有$$f(x)=e^$$

也就是$$g(x)=\ln f(x)$$

多項式求\(\ln\)即可。

#include#includeusing namespace std;

const int n = 5005;

const int mod = 10007;

int n,c[n][n],bin[n*n],f[n];

int main()

#include#includeusing namespace std;

const int n = 3e5+5;

const int mod = 998244353;

const int rem = 882049182;

int n,jc[n],jcn[n],g[n],f[n],rev[n],og[n];

int fastpow(int a,int b)

return res;

}void init(int len)

return res;

}void init(int len)

return res;

}void init(int len)

void get_der(int *a,int *b,int len)

void get_int(int *a,int *b,int len)

int s2[n],s3[n];

void get_ln(int *a,int *b,int len)

int main()

int len=1;while (len<=n) len<<=1;

get_inv(g,f,len);

for (int i=0;i<=n;++i) f[i]=1ll*f[i]*fastpow(rem,1ll*i*i%(mod-1))%mod;

for (int i=n+1;imemset(g,0,sizeof(g));get_ln(f,g,len);

printf("%lld\n",1ll*g[n]*jc[n]%mod);

return 0;

}

帶標號的DAG計數I IV

帶標號的dag計數,陳指導最近出了一道最基礎的,發現好久沒用過生成函式那一類的了就來看看 dag的定義相信都不同多說了,以下預設對 998244353 取模 pro 求 n 點帶標號的dag的數目,不強制聯通,n le 5000 sol 顯然考慮 o n 2 設 f i 表示答案,我們每次列舉dag...

有標號的DAG計數 II

給定一正整數n,對n個點有標號的有向無環圖 可以不連通 進行計數,輸出答案mod 998244353的結果 考慮 o n 2 dp 列舉出度為 0 的點,構成的新 dag 方案數為 f i f i 1 c 2 即從 n 個點中選出乙個點,作為出度為 0 的點,然後剩下 n 1 個點向這個點任意連邊 ...

有標號DAG計數 生成函式

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 ...