please contact [email protected]! 警告
解題思路
可以證明最終的圖中所有點的度數都 \(< 3\) ,且不存在環長是 \(3\) 的倍數的環。這是充分必要的,由於圖不聯通,其就是由若干個聯通塊組成的,每個聯通塊是一條鏈或者環長不是 \(3\) 的倍數的環,然後強上egf就好了。
列出鏈的egf和環的egf
\[a(x)=x+\sum_\dfrac \\
b(x)=\sum_ \dfrac
\]答案的egf就是 \(\exp(a(x)+b(x))\) ,多項式 \(\exp\) 完再乘個階乘,複雜度 \(\mathcal o(n\log n)\) ,需要板子比較快。
code
/*program by mangoyang*/
#include#define inf (0x7f7f7f7f)
#define max(a, b) ((a) > (b) ? (a) : (b))
#define min(a, b) ((a) < (b) ? (a) : (b))
typedef long long ll;
using namespace std;
template inline void read(t &x)
const int n = (1 << 22) + 5, p = 1004535809, g = 3;
namespace poly
inline void init()
inline void timesinit(int lenth)
inline void dft(int *a, int sgn)
}} if(sgn == -1)
} inline void getinv(int *a, int *b, int n)
inline void getsqrt(int *a, int *b, int n)
inline void getln(int *a, int *b, int n)
inline void getexp(int *a, int *b, int n)
inline void power(int *a, int *b, int n, int m, ll k)
if(fir && k >= m) return;
if(fir == -1 || 1ll * fir * k >= m) return;
for(int i = fir; i < n; i++) b[i-fir] = a[i];
for(int i = 0; i < n - fir; i++)
b[i] = 1ll * b[i] * pow(a[fir], p - 2) % p;
getln(b, tmp, m);
for(int i = 0; i < m; i++)
b[i] = 1ll * tmp[i] * (k % p) % p, tmp[i] = 0;
getexp(b, tmp, m);
for(int i = m; i >= fir * k; i--)
b[i] = 1ll * tmp[i-fir*k] * pow(a[fir], k % (p - 1)) % p;
for(int i = 0; i < fir * k; i++) b[i] = 0;
for(int i = 0; i < m; i++) tmp[i] = 0; }}
using poly::pow;
using poly::dft;
using poly::timesinit;
int a[n], b[n], a[n], f[n], g[n], n, m;
int main()
BZOJ 4228 Tibbar的後花園
傳送門 求 nn n 個帶標號的點能滿足如下條件的無向圖個數 不存在重邊和自環。不存在三個點 a,b c a,b,c a,b,c,使三個點距離兩兩相等。輸出答案對 1004535809 1004535809 100453 5809 479 2 21 1479 times2 1 479 22 1 1,...
Tibbar的後花園 生成函式,多項式exp
這篇文章僅限於沒有入門生成函式的蒟蒻讀,dalao勿噴 題目的資料範圍是 n 2 題目給出的限制,其實就是對於每乙個聯通塊 1.不存在乙個點度數 ge 3 2.不存在乙個長度為 3 的倍數的環 可以看到,乙個大小為 n 的聯通塊,合法方案只有為一條鏈,或者乙個長度不為3的倍數的環 設 f n 為大小...
BZOJ3450 BZOJ4318 期望的線性性質
這兩個題的套路是一樣的,放在一起說。因為期望有線性性質,也就是說我們可以分開算每一位的期望,再加起來就是答案。由於e x 1 2 x 2 2 e x 1e x 1 2 x2 2e x 1,所以我們只需要維護乙個期望長度即可,維護的方法十分簡單,相信聰明的你很快就能明白。include using n...