【trick】树上路径长度查询->LCA深度查询->到根节点路径权值和查询

树链剖分

eg.求 d i s ( x , y ) dis(x,y) dis(x,y)

d i s ( x , y ) = d i s ( x ) + d i s ( y ) − 2 d i s ( l c a ( x , y ) ) dis(x,y)=dis(x)+dis(y)-2dis(lca(x,y)) dis(x,y)=dis(x)+dis(y)2dis(lca(x,y))

一般来讲,如果题目只是叫我们求距离,我们可以不用把 l c a ( x , y ) lca(x,y) lca(x,y) 求出来再带入运算。

可以将 ( 1 , x ) (1,x) (1,x) 的路径权值加一,再求 ( 1 , y ) (1,y) (1,y) 中的路径和就是 d i s ( l c a ( x , y ) ) dis(lca(x,y)) dis(lca(x,y))的答案,而 d i s ( x ) dis(x) dis(x), d i s ( y ) dis(y) dis(y) 已知,带入即可。

综上,我们将两点间的距离转化成了到根节点的权值和,使得查询从 O ( n l o g n ) O(nlogn) O(nlogn)变成了 O ( l o g n ) O(logn) O(logn)


__EOF__

本文作者仰望星空的蚂蚁
本文链接https://www.cnblogs.com/cqbzly/p/17530342.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   仰望星空的蚂蚁  阅读(14)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
点击右上角即可分享
微信分享提示