1 条题解
-
0
自动搬运
来自洛谷,原作者为

xiaolilsq
灰名不比红名好看(搬运于
2025-08-24 22:49:18,当前版本为作者最后更新于2023-08-03 23:51:10,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
考虑 Prüfer 序列构造树的过程,从前往后扫过整个序列,记录当前度数为 的点集 ,以及已经被删除的点集 ,每次如果遇到数 ,那么就将 中最小值连上 ,然后删除 中的最小值将其加入 ,而 则可能可以加入 也可能不加入 ,序列扫完后必然 ,这时 中唯一的数就会连上 。
于是可以如此 dp,设 表示考虑 这个序列中的子序列为最后一段, 为上面描述的两个点集,其中 与 距离的总和以及方案数。按照上面转移 ,且 ,所以复杂度为 。
考虑 Prüfer 序列具体构造过程是如何从 优化到 的,类似的,优化掉 ,用一个集合 ,那么实际上 就是 的一个后缀加上最多前面一个新加的点,所以可以将 优化到 ,时间复杂度复杂度优化为 。
但是我们发现如果当且 dp 要求的是 与 的距离,那么我们唯一关心的就是 连出去的父亲,所以如果新加的点如果不是 那么我们其实完全不关心它具体是谁,于是一个 可以被优化为一个 储存的状态,即 中当前最小的点是否恰好为 ,于是时间复杂度优化为 ,可以通过所有数据。
- 1
信息
- ID
- 8352
- 时间
- 2000ms
- 内存
- 150~512MiB
- 难度
- 7
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者