SRM 697 div1 hard

来源:互联网 发布:宏业软件下载 编辑:程序博客网 时间:2024/06/07 19:12

题目大意

n个城市,每个城市有个权值wi,任意两个城市i,j之间的道路数有wiwj条。对于每种生成树,设每个点的度数为di,其权值定义为di。问所有无根生成树的权值和。答案对109+7取模。
n2000

题解

因为与度数有关,所以很容易就能套上prufer序列。事实上,答案求的是这个东西:

==a1++an=2n2(n2)!(a11)!(an1)!wa11wanna1anw1wna1++an=n2(n2)!a1!an!wa11wann(a1+1)(an+1)w1wn(n2)!a1++an=n21a1!an!wa11wann(a1+1)(an+1)

现在相当于要求
a1++an=n21a1!an!wa11wann(a1+1)(an+1)

我们把(a1+1)(an+1)展开,单独考虑每个单项式的贡献,比如说考虑a1a2a3,那么有
==a1++an=n21a1!an!wa11wanna1a2a3w1w2w3a1++an=n231a1!an!wa11wannw1w2w3(w1++wn)n23(n23)!

据此,我们可以推断出,原式就等于
k=0n21p1<p2<<pkni=1kwpi(w1++wn)n2k(n2k)!

对于中间那一项,可以用一个O(n2) Dp直接求,那么整题就做完了。

总结:
1. prufer序列在含度数的生成树计数中异常有用
2. 把式子展开,考虑单项式的贡献

0 0
原创粉丝点击