CF917D Stranger Trees——多项式与Matrix Tree的完美结合

Description

给定一个包含 n n n个节点的无向树T。

现在,请你求出,对于所有 n n n个节点构造得到的无向树P,使得P与T的公用边的数量恰好 k k k的方案数。

你需要对于 k = 0 , 1 ⋯ n − 1 k=0,1 \cdots n-1 k=0,1n1分别输出答案,并将它们对 1 0 9 + 7 10^9+7 109+7取模。

Solution

朴素做法

根据生成函数的思想,我们可以对于给定的无向树T的每条边都赋予一个形如 x + 1 x+1 x+1的多项式。那么对于当前的 k k k的答案,就是所有生成树的边权之积 k k k次项的系数。

于是我们直接大力Matrix Tree定理套NTT即可。

时间复杂度 O ( n 4 log ⁡ n ) O(n^4 \log n) O(n4logn),且常数很大。


正解做法

考虑如何优化上面这个“套”。

不难发现,最终的多项式一定是一个 n − 1 n-1 n1次多项式。所以, n n n个点值即可唯一确定这个多项式,于是我们考虑让 x x x代表一个数而非无意义的形式幂级数,分别执行一次Matrix-Tree定理最终再高斯消元回去得到多项式的各项系数即可。

更具体的说,枚举 x = 1 , 2 ⋯ ⋯ n x=1,2 \cdots \cdots n x=1,2n。对于当前的 x x x,我们给每条在T中的边一个权值,即 x + 1 x+1 x+1。然后我们构造出Matrix-Tree定理中的矩阵,跑一遍高斯消元。最后我们再将点值表示转换为系数表示,于是我们就得到了朴素做法中的答案多项式的各项系数。

不难发现,时间复杂度为 O ( n 4 ) O(n^4) O(n4)。常数不大。

Summary

遇事不决,生成函数。

套多项式,巨大常数。

考虑点值,逐一求出。

高斯消元,正解欲出。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值