洛谷4841 城市規劃

2022-06-02 06:24:12 字數 1988 閱讀 2856

題意:

求\(n\)個點的簡單(無重邊無自環)有標號無向連通圖數目。

思路:設\(f(n)\)為點數為\(n\)的無向連通圖的數量,\(g(n)\)為點數為\(n\)的無向圖的數量,可以知道:

\[g(n)=2^

\]可以這麼理解,\(n\)個點中取兩個點連邊,一共有\(c_n^2\)種,每個邊存在連或不連兩種可能。

同時有:

\[g(n)=\sum_^nc_^f(i)\times g(n-i)

\]這個可以這麼理解,對於一號點,列舉它所在的連通塊中有多少個點。

代入\(g(n)\)可得:

\[2^=\sum_^nc_^f(i)2^^2}

\]化簡一下:

\[2^=\sum_^n\frac^2}}\\\frac}=\sum_^n\frac\times \frac^2}}\]設

\[f(x)=\sum_^\fracx^n\\g(x)=\sum_^\frac}x^n\\h(x)=\sum_^\frac}x^n

\]那麼有:

\[f\equiv h*g^(mod\ x^)

\]ntt+多項式求逆求解。

#includeusing namespace std;

typedef long long ll;

const int maxn = 6e5+10;

const ll mod = 1004535809;

const int g = 3;

int n;

ll inv[maxn]; //逆元

ll fiv[maxn]; //逆元的階乘

ll g1[maxn], g2[maxn], g3[maxn];

ll qmi(ll a, ll b)

return res%mod;

}int limit, len, rev[maxn];

void ntt(ll *c, int op)}}

if(op == 1) return;

ll inv = qmi(limit, mod-2);

for(int i = 0; i <= limit; i++) c[i] = c[i]*inv%mod;

}ll tmp[maxn];

void get_inv(ll *a, ll *b, int deg)

get_inv(a, b, (deg+1)>>1);

len = 0, limit = 1;

while(limit <= (deg+deg)) limit <<= 1, len++;

for(int i = 1; i <= limit; i++)

rev[i] = (rev[i>>1]>>1)|((i&1)<<(len-1));

for(int i = 0; i < deg; i++) tmp[i] = a[i];

for(int i = deg; i <= limit; i++) tmp[i] = 0;

ntt(tmp, 1), ntt(b, 1);

for(int i = 0; i <= limit; i++)

b[i] = 1ll*(2-1ll*tmp[i]*b[i]%mod+mod)%mod*b[i]%mod;

ntt(b, -1);

for(int i = deg; i <= limit; i++) b[i] = 0;

}int main()

g3[0] = 1;

for(ll i = 1; i < n; i++)

get_inv(g3, g2, n);

ntt(g1, 1); ntt(g2, 1);

for(int i = 0; i <= limit; i++) g1[i] = g1[i]*g2[i]%mod;

ntt(g1, -1);

ll ans = g1[n-1]%mod*qmi(fiv[n-2], mod-2)%mod;

cout << ans << endl;

return 0;

}

洛谷P4841 城市規劃

題目大意 求 n 個點的帶標號的無向連通圖的個數 題解 令 f x 為帶標號無向連通圖個數生成函式,g x 為帶標號無向圖個數生成函式 那麼 g x sum dfrac x i 列舉連通塊個數可得 g x sum dfrac f x f x 0 dfrac dfrac cdots dfrac x 0...

洛谷 P4841 城市規劃 解題報告

n個有標號點的簡單 無重邊無自環 無向連通圖數目.僅一行乙個整數 n le 130000 僅一行乙個整數,為方案數 bmod 1004535809 設 g i 表示 i 個點的圖的數目,f i 表示 i 個點聯通圖的個數 g n f n sum f i binomg 意義是聯通圖 非聯通圖,關於非聯...

P4841 集訓隊作業2013 城市規劃

設 f i 表示 i 個點的無向連通圖個數,g i 表示 i 個點的無向圖個數。列舉 1 所在連通塊的大小,有 g i sum limits ic f jg 化簡得 g i sum limits i fracf jg frac sum limits i frac frac 設 f i frac,g ...