[北京省选集训2019] 生成树计数

有一张 \(n\) 个点的带权无向图,求其所有生成树权值的 \(k\) 次方之和。一个生成树的权值为其所有边权值和。

\(n, k \le 30\)

[北京省选集训2019] 生成树计数 - 洛谷 P5296

没有 \(k\) 次方,而是乘积就是直接矩阵树定理了。

所以我们要想办法将式子转化为只和一条边有关的若干个式子的乘积。(也就是多项式形式)

\[\begin{aligned} (w_1 + w_2 + \dots + w_{n - 1})^k &= \sum\limits_{a_1 + a_2 + \dots + a_{n - 1} = n} \ \binom{k}{a_1, a_2, \dots, a_{n - 1}} \prod\limits_{i = 1}^{n - 1} w^{a_i} \\ &= k!\sum\limits_{a_1 + a_2 + \dots + a_{n - 1} = n} \ \prod\limits_{i = 1}^{n - 1} \frac{w^{a_i}}{a_i!} \\ &= k![x^k]\prod\limits_{i = 1}^{n - 1}(1 + w_ix + \frac{w_ix^2}{2} + \dots + \frac{w_i^k}{k!}) \end{aligned} \]

于是把 \((1 + w_ix + \frac{w_ix^2}{2} + \dots + \frac{w_i^k}{k!})\) 作为权值搞矩阵树定理即可。

做高斯消元的多项式除法时,需要求逆。但是只有 \([x^0] \ne 0\) 才有逆元,怎么办?

消元的时候找到这一列中 \([x^d] \ne 0\)\(d\) 最小的一项作为主元,然后所有的项都除掉一个 \(x^d\),这样主元就有逆了,求出主元的逆消元即可。求逆使用最朴素的 \(O(k^2)\) 做法即可。

时间复杂度:\(O(n^3k^2)\)


以防有人不会,还是说多项式求逆吧。为啥我连最朴素的多项求逆都不会呀!!

对于一个多项式 $ A\mod x^n$ 的逆元,设 \(A = a_0 + a_1x + a_2x^2 + \dots a_{n - 1}x^{n - 1}\),其逆元 \(B = b_0 + b_1x + \dots b_{n - 1}x^{n - 1}\)(更高也么意义。)可以得到方程组:

\[\begin{cases} a_0b_0 &= 1 \\ a_0b_1 + a_1b_0 &= 0 \\ a_0b_2 + a_1b_1 + a_2b_0 &= 0 \\ \vdots \end{cases} \]

解得(然后递推一下即可):

\[\begin{cases} b_0 &= \dfrac{1}{a_0} \\ b_i &= \dfrac{\sum\limits_{j = 1}^i a_jb_{i - j}}{-a_i} \end{cases} \]

posted @ 2026-01-12 21:52  xiehanrui0817  阅读(3)  评论(0)    收藏  举报