[清华集训2017]生成树计数

从一个连通块连出去一条边有 \(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}\]

然后这个东西可以多项式分治求,就没了

posted @ 2021-06-19 23:39  E&P  阅读(63)  评论(0编辑  收藏  举报