洛谷P4841 城市規劃

2022-05-24 01:06:12 字數 1822 閱讀 1577

題目大意:求$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)(x-x_0)^n}\\

f(x)=e^x, x_0=0\\

e^x=\sum\limits_^\dfrac

$$由泰勒展開得$g(x)=e^$

所以$f(x) = \ln g(x)$

$$f(x)=\ln g(x)\\

f'(x)=\dfrac\\

f(x)=\int\dfrac\mathrm

$$答案是$[x^n]f(x) \times n!$

卡點:

c++ code:

#include #include #define maxn 262144 + 10

const int mod = 1004535809, g = 3;

int n;

int g[maxn], f[maxn], fac[maxn], inv[maxn];

inline int pw(int base, long long p)

inline int inv(int x)

namespace polynomial

inline void up(int &a, int b)

inline void ntt(int *a, int op)

}} if (!op) for (int i = 0; i < lim; i++) a[i] = 1ll * a[i] * ilim % mod;

} void inv(int *a, int *b, int n)

inv(a, b, n + 1 >> 1), init(n << 1);

for (int i = 0; i < n; i++) c[i] = a[i];

for (int i = n; i < lim; i++) c[i] = b[i] = 0;

ntt(b, 1), ntt(c, 1);

for (int i = 0; i < lim; i++) b[i] = (2 + mod - 1ll * b[i] * c[i] % mod) * b[i] % mod;

ntt(b, 0);

for (int i = n; i < lim; i++) b[i] = 0;

} inline void der(int *a, int *b, int n)

inline void int(int *a, int *b, int n)

int d[maxn];

inline void ln(int *a, int *b, int len)

}int main()

for (int i = 2; i < n; i++) inv[i] = 1ll * inv[i - 1] * inv[i] % mod;

for (int i = 0; i < n; i++) g[i] = 1ll * pw(2, 1ll * i * (i - 1) >> 1ll) * inv[i] % mod;

polynomial::ln(g, f, n);

printf("%lld\n", 1ll * f[n - 1] * fac[n - 1] % mod);

return 0;

}

洛谷 P4841 城市規劃 解題報告

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

洛谷4841 城市規劃

題意 求 n 個點的簡單 無重邊無自環 有標號無向連通圖數目。思路 設 f n 為點數為 n 的無向連通圖的數量,g n 為點數為 n 的無向圖的數量,可以知道 g n 2 可以這麼理解,n 個點中取兩個點連邊,一共有 c n 2 種,每個邊存在連或不連兩種可能。同時有 g n sum nc f i...

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 ...