快乐的一天从AC开始 | 20210703 | P2633

题目链接

题目就是静态询问树上路径中第K小元素(强制在线)。

有一个非常经典的套路,就是记\(g(u)\)表示节点\(u\)到根这一路径上的信息,那么\(u\)\(v\)这一条路径的信息等于\(g(u) + g(v) - g(uv) - g(fuv)\),其中\(uv\)表示\(LCA(u, v)\)\(fuv\)\(uv\)的父节点。

根据这一点,就可以借助树链剖分和主席树\(O(n \log n)\)的解决这一道题:树链剖分用于求解LCA(也可以用倍增等算法求),在DFS的过程中,每访问到一个新节点\(u\),就令其为在其父节点的基础上添加\(a_u\)。这样可以维护每个节点到根路径上所有元素的权值线段树。

然后利用上面那个式子就可以完成查询操作。查询操作和静态区间第K大类似,相当于在权值线段树上二分,每次看往左子树走还是往右子树走即可。

posted @ 2021-07-03 10:40  _Backl1ght  阅读(21)  评论(0编辑  收藏  举报