抛开挂分不谈
这场模拟赛真是太幽默了哈哈哈
Stage 1
不难注意到
但是上述做法细节太多,尤其容易将
所以我们应当参考题解学习高级做法。
首先不难发现, 记
, 那么 求出
即可。 把下面的式子换个形式:
设
那么:
整理:
发现这是一阶线性微分方程的形式。
记
。 那么根据常数变易法, 有:
是有理函数: 这里认为
。 用级数积分(事实上, 原微分方程是非初等的)
根据牛顿二项式定理,有:
那么
所以
为了适合初始条件
。 那么:
所以
计算即可。时间复杂度 。 看这个形式不知道有没有组合意义的理解。
真是太巧妙了!!!虽然比我原来做法复杂度劣一点,但是真是简单太多了。
Stage 2
T2。只会
题解
直接做非常难做, 但你不难发现, 长度为
的序列, 可以理解为 个点的树对应的 prufer 序列! 进一步, prufer 序列出现次数加 1 就是树上对应的点的度数。
又由于只有
个值, 因此等于钦定标号为 的点度数为 1 。那我们不妨将它作为根。 然后就可以动态规划了。
表示大小为 的有根树的方案数。
表示 个有根树, 且大小总和为 的方案数。 转移是简单的:
对于
, 答案就是 。 组题人注:
可以做到更优的复杂度。这是供题人的原文:
利用全在线卷积优化,可以很轻松做到
。 生成函数(指多项式求逆)下,复杂度
。 但是由于写 std 的人不知道如何多项式求逆优化到
, 而全在线卷积套上去意义不大, 所以就成了 。
真是太巧妙了,这么难做的提为什么想不到图论!鞭策自己!
Conclusion
pig 给 dash 开门——抽象到机房了!