题解 CF932D Tree
题意
一开始只有一个节点,编号为 1,权重为 0,
接下来给
:加入一个节点(编号为 ,同时 加一),该节点的权重为 ,父亲为 。 :寻找最大长度的链满足:- 从
开始。 - 每个节点都是前一个节点的祖先。
- 这些节点的和值不超过
。 - 对于任意两个相邻的节点
, ( 是 的祖先, ),满足不存在节点 位于 到 的简单路径上使得 。
- 从
树的根恒定为 1。
输入是加密的,所输入的
希望能成为翻译。
解题
对于 2 操作的第 4 点,我们可以分析出,
- 我们并不需要想背包一样寻找更多的可转移的点,我们是找到就与前面的答案相连。
- 我们的 1 操作并不会影响其祖先的答案。
于是我们可以很快想到,我们可以用倍增来维护我们的答案。
在构图上,我们可以选择离线先把整棵树建完,也可以采用在插入节点时处理。
对于维护倍增,我们是寻找祖先中最近的大于等于当前值的节点,为了找到这个节点,我们需要不断寻找大于当前锁定节点的方式,快速找到这个节点。
Code。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧