题意:
给定\(n\)个点,一个图的价值定义为所有点的度数的\(k\)次方之和。
现在计算所有\(n\)个点的简单无向图的价值之和。
思路:
将式子列出来:
\[ \sum_{i=1}^n\sum_{j=0}^{n-1}{n-1\choose j}2^{\frac{(n-1)(n-2)}{2}}j^k \]
表示分别考虑每个点的贡献,我们只需要枚举其度数即可,其余的边任意连。
然后我们将后面的\(j^k\)用第二类斯特林数展开:
\[ \begin{aligned} &\sum_{i=1}^{n}\sum_{j=0}^{n-1}{n-1\choose j}2^{\frac{(n-1)(n-2)}{2}}\sum_{t=1}^{j}{j\choose t}t!\begin{Bmatrix} k \\ t \end{Bmatrix}\\ =&\sum_{i=1}^n2^{\frac{(n-1)(n-2)}{2}}\sum_{t=1}^{n-1}t!\begin{Bmatrix} k \\ t \end{Bmatrix}\sum_{j=t}^{n-1}{n - 1 \choose j}{j \choose t}\\ =&\sum_{i=1}^n2^{\frac{(n-1)(n-2)}{2}}\sum_{t=1}^{n-1}t!\begin{Bmatrix} k \\ t \end{Bmatrix}\sum_{j=t}^{n-1}{n - 1 \choose j}{j \choose t}\\ =&\sum_{i=1}^n2^{\frac{(n-1)(n-2)}{2}}\sum_{t=1}^{n-1}t!{n-1\choose t}\begin{Bmatrix} k \\ t \end{Bmatrix}\sum_{j=t}^{n-1}{n - 1 - t\choose j - t}\\ =&\sum_{i=1}^n2^{\frac{(n-1)(n-2)}{2}}\cdot\sum_{t=1}^{n-1}2^{n-1-t}t!{n-1\choose t}\begin{Bmatrix} k \\ t \end{Bmatrix}\\ =&\sum_{i=1}^n2^{\frac{(n-1)(n-2)}{2}}(n-1)!\cdot\sum_{t=1}^{n-1}\frac{2^{n-1-t}}{(n-1-t)!}\begin{Bmatrix} k \\ t \end{Bmatrix} \end{aligned} \]
似乎可以不要最后一行,对于每个点预处理之后可以直接\(O(n)\)算了。
因为卷积系数要求\(\displaystyle \begin{Bmatrix} k \\ t \end{Bmatrix}\),注意到这是一行的第二类斯特林数,那么我们可以直接通过\(FFT\)在\(O(klogk)\)的时间内预处理出来。预处理详见:传送门。
代码如下:
/*
* Author: heyuhhh
* Created Time: 2019/12/11 22:57:14
*/
#include
#include
#include
#include
#include
#include
#include