专栏文章
题解:P14637 [NOIP2025] 树的价值 / tree(民间数据)
P14637题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mimx7yfw
- 此快照首次捕获于
- 2025/12/01 17:02 3 个月前
- 此快照最后确认于
- 2025/12/01 17:02 3 个月前
称点 子树中所有点点权的 为 。称 的儿子构成集合 , 的祖先构成集合 。不失一般性的称其中某个儿子 。
首先有一些基础的结论 。
思考可以发现,我们可以将所有点 分为两类:一类 ,另一类 。对于第一类我们会把 变的很大,用于提高 的祖先的 ,即孝敬父亲。称第一类为白点,第二类为黑点。
最终形式会是:所有点 (可以发现取到最大的 一定是黑点)。然后对于每个白点,找到它祖先中第一个黑点的位置,并将它的 增加一。
于是得到暴力 DP: 考虑 的子树且 且总共有 个白点还没贡献的答案。 表示 是黑点否则是白点。转移的话再开一个数组 表示目前儿子中最大的 为 ,以及有 个白点。
最后:
考虑复杂度。 的总枚举量是树上背包,即 。 还会有 ,可以前缀和优化到 。总复杂度 。不知道为啥没写前缀和就过了 48 分。
继续刻画。初始 ,这与最外层的 方向一致,于是可以放宽到任意钦定一个黑点 为 的重儿子,并继承它的 。可以证明一个点一定存在至少一个黑儿子。这样会形成一个剖分的结构。而对于每个白点,找到它祖先中第一个黑点 ,那么它的贡献会让 到它所在链顶的 都加一,即它的贡献是 所在重链的深度。称 为 所在重链的深度,即深度比它小的、和它在同一重链上的点的数量加一。这样我们就将贡献计算全放在了白点上。暴力做法可以 枚举黑白点的掩码。
为什么一定存在黑儿子?
如果 的儿子都是白点,则找到它所在子树中最浅的黑点,把它到 的路径都改成黑点,则所有点的 都不变。前提是我们强制称所有叶子节点都是黑点。
这样一条重链上只有链顶可能是白点,其余都是黑点。
换一种 DP。 表示考虑 的子树的白点的贡献且 的答案。转移枚举它的重儿子 ,则:
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...