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 因為我們可以考慮欽定某一點...