CodeForces 825G Tree Queries

洛谷传送门

CF 传送门

模拟赛赛时做法。

看到查询路径点权最小值,想到建重构树,满足重构树上 \(\operatorname{LCA}(x, y)\) 为原树上 \(x \to y\) 路径的点权最小值。建树方法可以参考 CF1797F Li Hua and Path

于是问题变成了,维护一个点集,支持加点,查询给定点 \(x\) 到点集中所有点的 \(\operatorname{LCA}\) 中最浅的那个。

有个结论是点集中只有 dfn 序最小和最大的点有用。因为子树的 dfn 序是连续的,我们想让 \(\operatorname{LCA}\) 尽量浅,就要让以 \(\operatorname{LCA}\) 为根的子树尽量大。

于是我们维护点集中 dfn 序最小和最大的点即可,这样点集的大小不超过 \(2\)

时间复杂度 \(O((n + q) \log n)\)

posted @ 2023-08-26 15:38  zltzlt  阅读(10)  评论(0编辑  收藏  举报