SRM 697 div1 hard

题目大意

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. 把式子展开,考虑单项式的贡献

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值