题目大意
有n个城市,每个城市有个权值
n≤2000
题解
因为与度数有关,所以很容易就能套上prufer序列。事实上,答案求的是这个东西:
==∑a1+⋯+an=2n−2(n−2)!(a1−1)!⋯(an−1)!wa11⋯wanna1⋯anw1⋯wn∑a1+⋯+an=n−2(n−2)!a1!⋯an!wa11⋯wann(a1+1)⋯(an+1)w1⋯wn(n−2)!∑a1+⋯+an=n−21a1!⋯an!wa11⋯wann(a1+1)⋯(an+1)
现在相当于要求
∑a1+⋯+an=n−21a1!⋯an!wa11⋯wann(a1+1)⋯(an+1)
我们把(a1+1)⋯(an+1)展开,单独考虑每个单项式的贡献,比如说考虑a1a2a3,那么有
==∑a1+⋯+an=n−21a1!⋯an!wa11⋯wanna1a2a3w1w2w3∑a1+⋯+an=n−2−31a1!⋯an!wa11⋯wannw1w2w3(w1+⋯+wn)n−2−3(n−2−3)!
据此,我们可以推断出,原式就等于
∑k=0n−2⎛⎝∑1≤p1<p2<⋯<pk≤n∏i=1kwpi⎞⎠(w1+⋯+wn)n−2−k(n−2−k)!
对于中间那一项,可以用一个O(n2) Dp直接求,那么整题就做完了。
总结:
1. prufer序列在含度数的生成树计数中异常有用
2. 把式子展开,考虑单项式的贡献

本文探讨了在给定城市间道路数量与城市权值的情况下,如何计算所有无根生成树的权值总和。利用prufer序列将问题转换为组合数学问题,并通过多项式展开简化计算过程。
528

被折叠的 条评论
为什么被折叠?



