bzoj3456 城市規劃

2021-07-12 07:54:58 字數 1331 閱讀 3894

time limit: 40 sec  

memory limit: 256 mb

submit: 342  

solved: 204 [

submit][

status][

discuss]

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

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

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

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

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

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

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

ntt,思路很好

#include#include#include#include#include#include#define f(i,j,n) for(int i=j;i<=n;i++)

#define d(i,j,n) for(int i=j;i>=n;i--)

#define ll long long

#define maxn 300000

#define mod 1004535809

using namespace std;

int n,rev[maxn];

ll fac[maxn],a[maxn],b[maxn],c[maxn],inv_b[maxn],tmp[maxn];

inline ll getpow(ll x,ll y)

void ntt(ll *a,int n,int flag)

{ f(i,0,n-1) if (i>1;

ll wn=getpow(3,((mod-1)/m*flag+(mod-1))%(mod-1));

for(int i=0;i>1);

memcpy(tmp,a,sizeof(a[0])*n);

memset(tmp+n,0,sizeof(a[0])*n);

int m=1,len=-1;

while (m<(n<<1)) m<<=1,len++;

f(i,1,m-1) rev[i]=(rev[i>>1]>>1)|((i&1)<>1]>>1)|((i&1)<

bzoj 3456 城市規劃

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

bzoj 3456 城市規劃

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

BZOJ3456 城市規劃

轉送門 我們設點數為 n 的簡單圖的數量為 f n 點數為 n 的簡單連通圖有 g i 個 於是我們知道,從 n 個點中選 2 個點有 n choose 2 種選法,而對於兩個點可以連邊或不連,於是 f n 2 同時,f n 還滿足 f n sum limits g if 因為我們可以考慮欽定某一點...