P6862 [RC-03] 随机树生成器

原题

首先考虑dp的朴素做法,设dpi表示i个点的树时的答案

容易得到:

(1)dpK={(K1)!(K1)0(K=1)(2)dpi=dpi1×(i1)+(i2)!

其中(i2)!表示i1个点的满足题目构造条件的树的方案数

这么做的复杂度为O(Tn),显然过不了,也没发现什么明显的优化方法,寄


我们转念一想,发现这个题目似乎如果换成计算期望的话会好做非常多

首先还是先考虑期望时的dp做法,设dpi表示i个点的树时的答案

容易得到:

(3)dpK=[K1](4)dpi=dpi1+1i1

我们发现这个很好优化,明显可以写成通向公式:

(5)E=K+1n1i1+1(6)=Kn11i+1

我们只需要预处理出1i的前缀和即可

但还没有结束,因为我们要求的并不是期望,而是答案之和

但是可以知道E=sumcnt,其中sum表示答案之和,cnt表示方案数

因此我们可以得出sum=E×cnt,我们再考虑答案个数怎么求

显然,答案个数就是构造n个点的树的方案数,即(n1)!

因此我们只需要预处理出阶乘和逆元的前缀和即可O(1)查询

总复杂度O(n+T)

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