模拟赛赛时做法。
看到查询路径点权最小值,想到建重构树,满足重构树上 \(\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)\)。
标签:传送门,点权,Tree,CodeForces,825G,dfn,LCA,operatorname From: https://www.cnblogs.com/zltzlt-blog/p/17658875.html