洛谷P4233 射命丸文的筆記 多項式求逆

2022-02-27 09:43:47 字數 1947 閱讀 2203

洛谷p4233

我們只需求出總的哈密頓迴路個數和總的強聯通競賽圖個數

對於每條哈密頓迴路,我們統計其貢獻

一條哈密頓迴路就是乙個圓排列,有\(\frac\)種,剩餘邊隨便連

所以總的貢獻為

\[(n - 1)!2^ - n}

\]我們只需求出總的強聯通競賽圖的個數

設\(g[n]\)表示\(n\)個點競賽圖個數,\(f[n]\)表示強聯通競賽圖個數

那麼有\[g[n] = \sum\limits_^f[i]g[n - i]\]即

\[\frac = \sum\limits_^\frac\frac

\]設\(g(x)\)和\(f(x)\)分別為其指數型生成函式

那麼有\[g(x) = f(x)g(x) + 1\]即

\[f(x) = \frac

\]多項式求逆即可

複雜度\(o(nlogn)\)

#include#include#include#include#include#include#include#include#include#define ll long long int

#define rep(i,n) for (int i = 1; i <= (n); i++)

#define redge(u) for (int k = h[u],to; k; k = ed[k].nxt)

#define cls(s,v) memset(s,v,sizeof(s))

#define mp(a,b) make_pair(a,b)

#define cp pairusing namespace std;

const int maxn = 400005,maxm = 100005,inf = 0x3f3f3f3f;

inline int read()

while (c >= 48 && c <= 57)

return flag ? out : -out;

}const int p = 998244353,g = 3;

inline int qpow(int a,ll b)

inline ll c(int n)

int r[maxn];

void ntt(int* a,int n,int f)

} }if (f == 1) return;

int nv = qpow(n,p - 2); reverse(a + 1,a + n);

for (int i = 0; i < n; i++) a[i] = 1ll * a[i] * nv % p;

}int a[maxn],b[maxn],c[maxn],ans,n,fac[maxn],inv[maxn],fv[maxn];

void init()

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

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

int l = 0,n = 1;

while (n < (deg << 1)) n <<= 1,l++;

for (int i = 1; i < n; i++) r[i] = (r[i >> 1] >> 1) | ((i & 1) << (l - 1));

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

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

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

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

b[i] = 1ll * ((2ll - 1ll * c[i] * b[i] % p) + p) % p * b[i] % p;

ntt(b,n,-1);

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

}int main()

return 0;

}

洛谷 P1901 發射站

某地有 n 個能量發射站排成一行,每個發射站 i 都有不相同的高度 hi,並能向兩邊 當 然兩端的只能向一邊 同時發射能量值為 vi 的能量,並且發出的能量只被兩邊最近的且比 它高的發射站接收。顯然,每個發射站發來的能量有可能被 0 或 1 或 2 個其他發射站所接受,特別是為了安 全,每個發射站接...

洛谷P1901 發射站

這道題跟 noip2012 開車旅行的預處理完全一樣。通過鍊錶來實現。1 include 2 3using namespace std 45 define re register 6 define rep i,a,b for re int i a i b i 7 define repd i,a,b ...

洛谷P1901 發射站(單調棧)

某地有 n 個能量發射站排成一行,每個發射站 i 都有不相同的高度 hi,並能向兩邊 當 然兩端的只能向一邊 同時發射能量值為 vi 的能量,並且發出的能量只被兩邊最近的且比 它高的發射站接收。顯然,每個發射站發來的能量有可能被 0 或 1 或 2 個其他發射站所接受,特別是為了安 全,每個發射站接...