题解 CF725G Messages on a Tree

update on 2023.8.9 修正了一些错误。

link

i 条信息的传输可以表示成 xi 走到 xi 的某一祖先再走回 xi 的路径。所以答案只和 xi 的这一祖先有关,记为 fi,则 ansi=ti+2×depxi2×depfi

xifi 停下,说明更早的时刻(或同一时刻但编号更小),有 xj 经过了 fi,且到现在它也没回来。

于是有

{(ti+depxidepfi,xi)>(tj+depxjdepfi,xj)ti+depxidepfi<tj+depxj+depfi2×depfj

二元组大小比较以第一项为第一关键字,第二项为第二关键字。

整理得

{(ti+depxi,xi)>(tj+depxj,xj)ti+depxi<tj+depxj+2×depfi2×depfj

这是个二维偏序,把信息按 (ti+depxi,xi) 排序,依次加入,即可满足第一条关系。

对于第二条关系,我们应该顺着根到 xi 的路径向上爬,直到第一个节点 u,满足 ti+depxi<tj+depxj+2×depu2×depfj。所以对于树上每个点 u,维护 gu 表示经过点 u 的点 xj 中,tj+depxj2×depfj 的最大值。于是只需找最深度最大的 xi 的祖先,满足 ti+depxi<gu+2×depu。树剖,维护 max(gu+2×depu),然后线段树二分即可。算出 fi 后更新路径上最大值。

时间复杂度 O(nlog2n)。当然也可以用 LCT 做这种链上问题,可以少一个 log

posted @   Terac  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示