Wuvin

强于忧患,亡于安乐。
Always take risks

长链剖分查K级祖先

在WC上第一次听到这个次,但他们表示这个只是预备只是就不讲了。。。

我学了这么多年OI怎么没听过呢?百度也搜不到啊!!!

然后今天突然乱翻遇到这个算法。。。在wiki上有详细的英文版,没有中文版。。。那就翻译一下吧

https://en.wikipedia.org/wiki/Level_ancestor_problem

算法作用:O(nlogn)预处理,O(1)回答第k级祖先。

首先预处理出倍增数组

然后按照深度剖分,然后把每条链向上延长自己的长度的一倍。于是如果一个点的子树深度为d,那么他可以O(1)查询自己的前d级祖先。

所以每次查询先倍增跳一次,然后长链剖分跳一下就到了。

然后据说用四毛子算法可以做到O(n)-O(1)。

预处理所有大小小于(logn)/4的子树

评论
©Wuvin
Powered by LOFTER