BZOJ3456 城市規劃

2022-05-30 19:18:16 字數 1494 閱讀 3607

剛剛解決完電力網路的問題, 阿狸又被領導的任務給難住了.

剛才說過, 阿狸的國家有n個城市, 現在國家需要在某些城市對之間建立一些**路線, 使得整個國家的任意兩個城市都直接或間接的連通. 為了省錢, 每兩個城市之間最多只能有一條直接的**路徑. 對於兩個建立路線的方案, 如果存在乙個城市對, 在兩個方案中是否建立路線不一樣, 那麼這兩個方案就是不同的, 否則就是相同的. 現在你需要求出一共有多少不同的方案.

好了, 這就是困擾阿狸的問題. 換句話說, 你需要求出n個點的簡單(無重邊無自環)無向連通圖數目.

由於這個數字可能非常大, 你只需要輸出方案數mod 1004535809(479 * 2 ^ 21 + 1)即可.

僅一行乙個整數n(<=130000)

僅一行乙個整數, 為方案數 mod 1004535809.

3
4
對於 100%的資料, n <= 130000

設\(f(i)\)為\(i\)個點的題目所求的答案,\(g(i)\)為\(i\)個點隨便連的方案數,那麼我們列舉\(1\)號點所在聯通塊的大小,可得:

\[g(n)=\sum_^nf(i)\binomg(n-i)=2^}=2^

\]容易知道這樣可以不重不漏的算到所有狀態。

我們把\(g\)帶進去:

\[2^=\sum_^nf(i)\binom2^}

\]兩邊除以\((n-1)!\):

\[\frac}=\sum_^n\frac\times \frac}}

\]注意到這是個卷積的形式,用生成函式表示一下:

\[a(x)=\sum_^\infty\frac}x^n\\

b(x)=\sum_^\infty\frac}x^n\\

f(x)=\sum_^\infty\fracx^n

\]那麼:

\[a(x)=f(x)b(x),f(x)=a(x)b^(x)

\]那麼直接套多項式求逆的板子就好了。

#includeusing namespace std;

void read(int &x)

void print(int x)

void write(int x)

#define lf double

#define ll long long

const int maxn = 6e5+10;

const int inf = 1e9;

const lf eps = 1e-8;

const int mod = 1004535809;

int n,w[maxn],rw[maxn],pos[maxn],f[maxn],a[maxn],b[maxn],c[maxn],mxn,n,bit,fac[maxn],ifac[maxn],g[maxn];

int qpow(int aa,int x)

void prepare()

void ntt(int *r,int op)

bzoj 3456 城市規劃

題意 求n個點的無向連通圖個數 n個點不同,答案對1004535809取模 n 130000 題解 生成函式的種種神奇應用 不過這玩意真是越來越不oi了 笑 這道題首先考慮遞推公式 設f x 為結點數為x的答案 那麼用總的無向圖數減去不連通的無向圖數目就是答案 f i 2 i i 1 2 f j 2...

bzoj3456 城市規劃

time limit 40 sec memory limit 256 mb submit 342 solved 204 submit status discuss 剛剛解決完電力網路的問題,阿狸又被領導的任務給難住了.剛才說過,阿狸的國家有n個城市,現在國家需要在某些城市對之間建立一些 路線,使得整...

bzoj 3456 城市規劃

好像歐爺很久以前就考過這道題了,然而我這個幼兒園小同學到現在才寫 懶得寫題解了,寫完後找幾份好點的題解搬了 求 n 個點無標號簡單無向連通圖個數。方法1那個所謂的 麥克勞林級數 說得有點高階。其實那個式子就是指數生成函式,然後根據某些特性 當然我不會證 指數生成函式可以表示成 e 的冪。方法2 最後...