轉送門
我們設點數為\(n\)的簡單圖的數量為\(f_n\), 點數為\(n\)的簡單連通圖有\(g_i\)個
於是我們知道,從\(n\)個點中選\(2\)個點有\(n \choose 2\)種選法, 而對於兩個點可以連邊或不連, 於是\(f_n = 2^\)
同時, \(f_n\)還滿足\(f_n = \sum\limits_^}g_if_\), 因為我們可以考慮欽定某一點為聯通塊中的一點, 然後從剩餘的點中找\(i-1\)個點, 練成乙個聯通塊, 剩下隨便, 然後\(i\)取遍\(1 \sim n\)中的所有數後的和為\(f_n\)。
於是, 我們來愉快的推式子
\[2^ = \sum_^ \choose }g_if_
\]把\(f_n = 2^\)帶入
\[\begin
2^ &= \sum_^ \choose }2^ \choose }g_i\\
2^ &= \sum_^\frac/}g_i2^ \choose 2}\\
2^ &= \sum_^\frac}g_i2^ \choose }\\
2^ &= (n-1)!\sum_^\fracg_i2^ \choose }\\
\frac \choose 2}} &= \sum_^\fracg_i2^ \choose }\\
\frac \choose 2}} &= \sum_^ \left(\frac2^ \choose }\right)\left(\fracg_i\right)
\end
\]這是乙個卷積
我們令\(a(x) = \sum\limits_^\frac2^x^i\), \(b(x) = \sum\limits_^\fracg_x^i\), \(c(x) = \sum\limits_^\frac2^x^i\)
於是\(c(x) = a(x)b(x)\)
然後\(b(x) = a(x)c^(x)\)
#include #include #include #include #include using namespace std;
typedef long long ll;
const int n = 520010;
const ll mod = 1004535809ll;
inline ll power(ll a, ll n, ll mod)
return ans;
}struct mul
void ntt(ll * a, int opt)
}} if (opt == -1)
}void getlen(int l)
void init()
} calc;
ll tmp1[n], tmp2[n];
void cpy(ll * a, ll * b, int len1, int len2)
void getinv(ll * a, ll * b, int len)
}ll a[n], b[n], ans[n];
ll fac[n];
int main()
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 最後...