从一个连通块连出去一条边有 \(a_i\) 种方案,那么连出去 \(n\) 条互不相同的边的方案数就是 \(a_i^n\)
由此,我们可以将每个连通块看成一个点
我们发现最终要求的东西只与每个点的度数有关系,用 prufer 序列来考虑
prufer 序列为一个长度为 \(n-2\) 的序列,如果 \(i\) 在里面出现了 \(d_i\) 次,那么 \(i\) 的度数为 \(d_i+1\)
容易写出答案的式子:
\[\begin{aligned}
ans&=\sum\limits_{\sum d=n-2}\dbinom{n-2}{d_1,d_2,\dots,d_n}\left(\prod\limits_{i=1}^{n}(d_i+1)^m\right)\left(\sum\limits_{i=1}^{n}(d_i+1)^m\right)\left(\prod\limits_{i=1}^{n}a_i^{d_i+1}\right)\\
&=\sum\limits_{\sum d=n-2}\dfrac{(n-2)!}{\prod_{i=1}^n d_i!}\left(\prod\limits_{i=1}^{n}(d_i+1)^m\right)\left(\sum\limits_{i=1}^{n}(d_i+1)^m\right)\left(\prod\limits_{i=1}^{n}a_i^{d_i+1}\right)\\
&=(n-2)!\prod\limits_{i=1}^na_i\sum\limits_{\sum d=n-2}\left(\sum\limits_{i=1}^{n}(d_i+1)^m\right)\left(\prod\limits_{i=1}^{n}\dfrac{a_i^{d_i}}{d_i!}(d_i+1)^m\right)
\end{aligned}\]
前面的一点点是定值,我们只需要考虑后面的部分:
\[ans'=\sum\limits_{\sum d=n-2}\left(\sum\limits_{i=1}^{n}(d_i+1)^m\right)\left(\prod\limits_{i=1}^{n}\dfrac{a_i^{d_i}}{d_i!}(d_i+1)^m\right)
\]
\(\sum d=n-2\) 提示我们使用多项式,即设若干个生成函数 \(F_i(x)=\sum\limits_{j=0}^{\inf}f(i,j)x^j\),其中 \(f(i,j)\) 表示 \(d_i=j\) 时式子中的值
然而我们如果根据上面的多项式是设不出合理的多项式的,因为右侧 \(\prod\limits_{i=1}^{n}\dfrac{a_i^{d_i}}{d_i!}(d_i+1)^m\) 的次数就已经是 \(\sum d\) 了,且左侧 \(\sum\limits_{i=1}^{n}(d_i+1)\) 的次数是不确定的
所以我们需要对式子进行变形:
\[\begin{aligned}
ans'&=\sum\limits_{\sum d=n-2}\left(\sum\limits_{i=1}^{n}(d_i+1)^m\right)\left(\prod\limits_{i=1}^{n}\dfrac{a_i^{d_i}}{d_i!}(d_i+1)^m\right)\\
&=\sum\limits_{\sum d=n-2}\sum\limits_{i=1}^n\dfrac{a_i^{d_i}}{d_i!}(d_i+1)^{2m}\prod\limits_{j\neq i}\dfrac{a_j^{d_j}}{d_j!}(d_j+1)^m
\end{aligned}\]
即我们将 \(\prod\limits_{i=1}^{n}\dfrac{a_i^{d_i}}{d_i!}(d_i+1)^m\) 中的一项提到了前面
现在我们观察式子,可以发现左侧的次数为 \(d_i\),而右侧的次数为 \(\sum\limits_{j\neq i}\),则我们左右侧相乘的次数就为 \(\sum d\) 了
至此,我们可以设 \(F_i(x)=\sum\limits_{j=0}^{\inf}\dfrac{a_i^j}{j!}(j+1)^{2m}x^j\),\(G_i(x)=\sum\limits_{j=0}^{\inf}\dfrac{a_i^j}{j!}(j+1)^{m}x^j\)
\[\begin{aligned}
ans'&=[x^{n-2}]\sum\limits_{i=1}^nF_i(x)\prod_{j\neq i}G_j(x)\\
&=[x^{n-2}]\left(\sum\limits_{i=1}^n\dfrac{F_i(x)}{G_i(x)}\right)\left(\prod\limits_{i=1}^nG_i(x)\right)
\end{aligned}\]
看上去还是不太行的样子,我们发现 \(F_i(x)\) 和 \(G_i(x)\) 中与 \(i\) 相关的只有 \(a_i\),尝试消除 \(a_i\) 在多项式中的影响,举函数 \(F(x)=\sum\limits_{i=1}^{\inf}f(i)x^i\) 为例:
\[\begin{aligned}
&\sum\limits_{i=1}^n\sum\limits_{j=1}^{\inf}f(j)a_i^jx^j\\
=&\sum\limits_{j=1}^{\inf}f(j)\left(\sum\limits_{i=1}^na_i^j\right)x^j
\end{aligned}\]
设 \(S(k)=\sum\limits_{i=1}^na_i^k\)
则 \(\sum\limits_{i=1}^nF_i(x)=\sum\limits_{i=1}^{\inf}f(j)S(j)x^j\)
如果我们能快速求出 \(S(k)(k\in[0,n])\) 的话,我们就可以快速求出 \(\sum\limits_{i=1}^nF_i(x)\),即不考虑 \(i\) 的影响,最后第 \(i\) 项乘 \(S(i)\)
右侧的 \(\prod\) 也有套路的方法化成 \(\sum\):
\[\begin{aligned}
ans'=[x^{n-2}]\left(\sum\limits_{i=1}^n\dfrac{F_i(x)}{G_i(x)}\right)\exp\left(\sum\limits_{i=1}^n\ln\left(G_i(x)\right)\right)
\end{aligned}\]
现在我们考虑对于所有的 \(k\in[0,n]\) 求出 \(\sum\limits_{i=1}^na_i^k\)
这是一个经典问题
\[\begin{aligned}
F(x)&=\sum\limits_{j=0}^{\inf} S(j+1) x^j\\
&=\sum\limits_{i=1}^na_i\sum\limits_{j=0}^{\inf}(a_ix)^j\\
&=\sum\limits_{i=1}^n\dfrac{a_i}{1-a_ix}\\
&=-\sum\limits_{i=1}^n\ln'(1-a_ix)\\
&=-\left(\ln\left(\prod\limits_{i=1}^n(1-a_ix)\right)\right)'
\end{aligned}\]
然后这个东西可以多项式分治求,就没了