把博客园图标替换成自己的图标
把博客园图标替换成自己的图标end

题解 CF932D Tree

洛谷
Codeforces

题意

一开始只有一个节点,编号为 1,权重为 0,cnt 初始值为 1。
接下来给 Q 个操作:

  • 1 R W:加入一个节点(编号为 cnt+1,同时 cnt 加一),该节点的权重为 W,父亲为 R
  • 2 R X:寻找最大长度的链满足:
    1. R 开始。
    2. 每个节点都是前一个节点的祖先。
    3. 这些节点的和值不超过 X
    4. 对于任意两个相邻的节点 ijij 的祖先,wiwj),满足不存在节点 k 位于 ij 的简单路径上使得 wkwj

树的根恒定为 1。
输入是加密的,所输入的 RWX 都需要异或上上一次 2 操作的答案。(初始值为 0)。

希望能成为翻译。

解题

对于 2 操作的第 4 点,我们可以分析出,

  1. 我们并不需要想背包一样寻找更多的可转移的点,我们是找到就与前面的答案相连。
  2. 我们的 1 操作并不会影响其祖先的答案。

于是我们可以很快想到,我们可以用倍增来维护我们的答案。
在构图上,我们可以选择离线先把整棵树建完,也可以采用在插入节点时处理。

对于维护倍增,我们是寻找祖先中最近的大于等于当前值的节点,为了找到这个节点,我们需要不断寻找大于当前锁定节点的方式,快速找到这个节点。

Code

posted @   djh0314  阅读(6)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
浏览器标题切换
浏览器标题切换end
点击右上角即可分享
微信分享提示