【题解】P5219 无聊的水题 I

思路

prufer 序列 + 卷积优化 dp.

首先考虑到令 a 为原树的 prufer 序列,则 i=1n2[ai=k]=deg(k),其中 deg(k)k 点的度数。

所以可以转化问题:对长度为 n2,值域为 [1,n] 且众数出现次数在 m 以内的序列个数。

对于这类构造序列,并且转移需要知道值出现次数(或和等)的 dp,可以考虑钦定长度,然后依次考虑每个数对当前序列的所有贡献。

f[i][j] 表示对于长度为 i 的序列,考虑值域为 [1,j] 时的答案。最后答案稍微容斥一下。

转移考虑枚举 j 的贡献,得 f[i][j]=k=0min(i,m)(ik)f[ik][j1].

考虑套路地拆开组合数:f[i][j]=k=0min(i,m)i!k!(ik)!f[ik][j1].

整理得 f[i][j]i!=k=0min(i,m)f[ik][j1](ik)!.

注意到转移实际上是加法卷积进行若干层,可以考虑用卷积优化。

Fi(x)=j=0mf[i][j],G(x)=i=0n[im](i!),那么每层的转移就是 FG.

注意到每层的 G 都是相同的,并且 F 的初始状态是零次项为 1 的零次多项式,可以考虑直接倍增求 G 的幂。

时间复杂度 O(nlog2n).

注意代码和题解不符(dp 两维交换顺序)

代码

posted @   kymru  阅读(24)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
点击右上角即可分享
微信分享提示
主题色彩