BZOJ3456 城市規劃 多項式求逆

2022-05-20 07:43:27 字數 1384 閱讀 7570

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

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

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

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

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

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

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

題解:一直打算做來著,前幾天終於抽空把這題過了~

設f[n]表示n個點的簡單無向連通圖數目,先列出大家都會的dp方程:

$f[n]=2^-\sum\limits_^f[i]c_^2^$

哎呀好多n-1太煩了,還是令f[n]表示n+1個點的簡單無向連通圖數目吧:

$f[n]=2^-\sum\limits_^f[i]c_n^i2^$

組合數很不優美是不是?那就拆了好啦。

$f[n]=2^-n!\sum\limits_^\over i!(n-i)!}$

下面我們想把只含有含有n的放到一起,i放到一起,n-i放到一起,於是瘋狂移項得到:

$=\over n!}-\sum\limits_^\cdot\over (n-i)!}$

明朗很多了是不是?令$f(x)=,g(x)=\over x!},h(x)=\over x!}$,特別地,h(0)=0。

所以$f(x)=g(x)-f(x)*h(x)$,$f(x)=$,多項式求個逆就好了。

#include #include #include #include using namespace std;

typedef long long ll;

const ll p=1004535809;

const int maxn=(1<<19)+4;

int n;

ll a[maxn],b[maxn],c[maxn],d[maxn],ine[maxn],jc[maxn],jcc[maxn];

inline ll pm(ll x,ll y)

return z;

}inline void ntt(ll *a,int len,int f)

ll wn,w,t;

for(h=2;h<=len;h<<=1)

int main()

bzoj3456 城市規劃 多項式,分治

description 剛剛解決完電力網路的問題,阿狸又被領導的任務給難住了.剛才說過,阿狸的國家有n個城市,現在國家需要在某些城市對之間建立一些 路線,使得整個國家的任意兩個城市都直接或間接的連通.為了省錢,每兩個城市之間最多只能有一條直接的 路徑.對於兩個建立路線的方案,如果存在乙個城市對,在兩...

bzoj3456 城市規劃 多項式求In

n 個點的無向聯通圖的個數 打著好累啊 一定要封裝乙個板子 記 c x 為無向圖個數的指數型生成函式,c 0 1 記 g x 為無向聯通圖個數的指數型生成函式,g 0 0 那麼 g x e 從而,c x in g x 複雜度 o n log n include include include inc...

多項式求逆 BZOJ3456 城市規劃

剛剛解決完電力網路的問題,阿狸又被領導的任務給難住了.剛才說過,阿狸的國家有n個城市,現在國家需要在某些城市對之間建立一些 路線,使得整個國家的任意兩個城市都直接或間接的連通.為了省錢,每兩個城市之間最多只能有一條直接的 路徑.對於兩個建立路線的方案,如果存在乙個城市對,在兩個方案中是否建立路線不一...