Description
令一个序列 S S S 的 k k k 阶平均数为 ∑ i = 1 ∣ S ∣ S i k ( ∑ i = 1 ∣ S ∣ S i ) k \frac {\sum_{i=1}^{|S|} S_i^k} {\left(\sum_{i=1}^{|S|} S_i \right)^k} (∑i=1∣S∣Si)k∑i=1∣S∣Sik
令一个图的 k k k 阶权值为,其所有连通块的大小组成的序列的 k k k 阶平均数。
请对于 k = 0 , 1 , 2 , ⋯ K k=0,1,2,\cdots K k=0,1,2,⋯K,求出点数为 n n n 的简单图的 k k k 阶权值和,答案对 998244353 998244353 998244353 取模。
1 ≤ N ≤ 2 × 1 0 5 , 1 ≤ K ≤ 5000 1 \le N \le 2 \times 10^5,1 \le K \le 5000 1≤N≤2×105,1≤K≤5000,时限 1s \texttt{1s} 1s 。
加强版: 1 ≤ N , K ≤ 5 × 1 0 5 1 \le N,K \le 5 \times 10^5 1≤N,K≤5×105,时限 6s \texttt{6s} 6s 。
Solution
算法一
令 n n n 个点的简单图有 F n F_n Fn 个, n n n 个点的连通图有 G n G_n Gn 个。令它们的 EGF \text{EGF} EGF 分别为 F ( x ) , G ( x ) F(x),G(x) F(x),G(x) ,根据 exp \exp exp 的性质,不难发现
e G ( x ) = F ( x ) e^{G(x)}=F(x) eG(x)=F(x)
同时,有
F
n
=
2
n
(
n
−
1
)
2
F_n=2^{\frac {n(n-1)} 2}
Fn=22n(n−1)
求出每一个 F n F_n Fn 后多项式 ln \ln ln 就得到了每一个 G n G_n Gn 。
考虑答案的式子
a n s k = ∑ i = 1 n i k G i F n − i ans_k=\sum_{i=1}^n i^k G_i F_{n-i} ansk=i=1∑nikGiFn−i
阶乘逆元预处理,然后暴力求即可。时间复杂度 O ( n k ) O(nk) O(nk) 。
算法二
推式子。
= ∑ i = 1 n ( n i ) i k G i F n − i =\sum_{i=1}^n {n \choose i}i^k G_i F_{n-i} =i=1∑n(in)ikGiFn−i
= ∑ i = 1 n ( n i ) ( ∑ j = 0 k { k j } j ! ( i j ) ) G i F n − i =\sum_{i=1}^n {n \choose i}\left(\sum_{j=0}^k \begin{Bmatrix} k \\ j \end{Bmatrix} j!{i \choose j}\right) G_i F_{n-i} =i=1∑n(in)(j=0∑k{kj}j!(ji))GiFn−i
= ∑ j = 0 k { k j } j ! ∑ i = 1 n ( n i ) ( i j ) G i F n − i =\sum_{j=0}^k \begin{Bmatrix} k \\ j \end{Bmatrix} j! \sum_{i=1}^n {n \choose i}{i \choose j} G_i F_{n-i} =j=0∑k{kj}j!i=1∑n(in)(ji)GiFn−i
= ∑ j = 0 k { k j } j ! ( n j ) ∑ i = 1 n ( n − j i − j ) G i F n − i =\sum_{j=0}^k \begin{Bmatrix} k \\ j \end{Bmatrix} j! {n \choose j}\sum_{i=1}^n {n-j \choose i-j} G_i F_{n-i} =j=0∑k{kj}j!(jn)i=1∑n(i−jn−j)GiFn−i
令 f i = G i F n − i f_i=G_i F_{n-i} fi=GiFn−i ,则
= ∑ j = 0 k { k j } j ! ∑ i = 1 n ( n − j i − j ) f i =\sum_{j=0}^k \begin{Bmatrix} k \\ j \end{Bmatrix} j! \sum_{i=1}^n {n-j \choose i-j} f_i =j=0∑k{kj}j!i=1∑n(i−jn−j)fi
考虑后面的那一部分:
P ( j ) = ∑ i = 1 n ( n − j i − j ) f i P(j)=\sum_{i=1}^n {n-j \choose i-j} f_i P(j)=i=1∑n(i−jn−j)fi
= ( n − j ) ! ∑ i = 1 n 1 ( n − i + 1 ) ! ( i − j ) ! f i =(n-j)!\sum_{i=1}^n {\frac {1} {(n-i+1)!(i-j)!}} f_i =(n−j)!i=1∑n(n−i+1)!(i−j)!1fi
令 A ( i ) = 1 ( n − i + 1 ) ! f i , B ( i ) = 1 i ! A(i)=\frac {1} {(n-i+1)!}f_i,B(i)=\frac {1} {i!} A(i)=(n−i+1)!1fi,B(i)=i!1 ,则
P ( j ) = ( n − j ) ! ∑ i = 1 n A i B i − j P(j)=(n-j)! \sum_{i=1}^n A_i B_{i-j} P(j)=(n−j)!i=1∑nAiBi−j
不难发现这是一个关于差的卷积,于是我们将 A A A 翻转,乘上 B B B 得到 P ′ P' P′ ,最后再将 P ′ P' P′ 翻转得到 P P P 即可。
带入原式
∑ j = 0 k { k j } j ! ( n j ) P ( j ) \sum_{j=0}^k \begin{Bmatrix} k \\ j \end{Bmatrix} j! {n \choose j}P(j) j=0∑k{kj}j!(jn)P(j)
这一部分暴力计算即可。
总时间复杂度 O ( n log n + k 2 ) O(n \log n + k^2) O(nlogn+k2) 。