专栏文章
[NOIP2025] 树的价值
P14637题解参与者 8已保存评论 7
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 6 条
- 当前快照
- 1 份
- 快照标识符
- @mimxnkw6
- 此快照首次捕获于
- 2025/12/01 17:14 3 个月前
- 此快照最后确认于
- 2025/12/01 17:14 3 个月前
首先可以考虑 如何刻画,由于 本身是最大化,与问题中 的和的最大化方向相同,所以可以将条件弱化为每一个节点 钦定一个 ,使得子树内 均出现过,使得 最大化。
如果只考虑对于一个序列 判定合法性,那么这可以被看作一个树上的匹配问题,每次 首先至少可以达到 ,如果要使得 取到更大,则每加大 ,需要在子树中选一个未被赋值的节点赋值成现在的 ,则 可以增大 。直接 匹配可以做到 。
进一步的,考虑弱化 再逐步增大的限制,这里的 与答案的 方向也是相同的,这相当于钦定一个 ,让 取到 ,然后可以不断通过匹配子树中未被赋值的点赋值来 。
这样对于一个确定的 ,其构成了一个剖分,对于一次 的 ,其可以使得 到 所在的链的顶端的 加 ,故这个点对答案产生的贡献为其在链上的深度(即在链剖分中其所在的链中比其小的深度的个数加 ,下文中令 在链上的深度为 )。那么对于每一个未匹配的点 ,使其在 最大一个产生贡献最优,故仅 链剖分的 并记录每个点到根结点这条路径 的最大值不难做到 。
实际上我们 的问题变成了这样一个结构:根节点 ,且对于每一个节点 ,若其不是叶子,则恰好存在一个 使得 ,其余儿子的 均为 。求 的最大值。一个自然的优化想法是仅对于每个节点 ,仅 。
现在考虑问题变成了怎样的结构,不难发现实际上对于 的取 可以通过每一次对链的取 进行。每次将根所在的链对 取 ,删除这条链,则其余的子树可以看作若干个子问题,每个子树的根可以看作原问题的根。考虑 这个结构,对于根所在的链对 的取 ,令链的长度为 ,目前的根为 ,有两种情况:
若 ,则实际上对于这条链,所有的 取到 ,取 没有产生贡献, 这样的一个结构即可 。
若 ,则将分为两部分,对于链上 的节点 ,;对于链上 的节点 ,。考虑在 的点上统计贡献,子树内的结构(即 的节点)是简单的,可以简单 做到 。而对于 的节点,相当于在断掉 到祖先这条链后,除了 子树外的其他子树中根的 取到 的会对 的结果产生贡献。这是一个经典的问题(人造情感),在每次 完一个点后,对于每一个以该节点的儿子为根的子树,让该节点儿子为根的其他子树的 对其进行子树加即可,这可以用树状数组快速维护,做到 。
故复杂度可以做到 ,可以通过本题。
相关推荐
评论
共 7 条评论,欢迎与作者交流。
正在加载评论...