关于dfs序求lca的一点思考

最近学了一点黑科技,这就是一个。有一个结论

比如这就是一个dfn序。在代码中,常常对beg和ed都开一个数组。如果一个点是x,y的lca记为g,那么有以下结论\(beg[g]<min(beg[x],beg[y]),ed[g]>max(ed[x],ed[y])\)
感性理解即可。所以我们就可以在符合的点找深度最大的。这是一种思路,常常是用来压缩多次lca的,如P7103。然后这还有个\(O(n \log n)-O(1)\)求lca的做法。是在beg[x]和ed[y]中找深度最小的节点,他的父亲就是lca。比如图中6,5的lca,dfn中3-12中有6,4,10,9,5这几个节点,用rmq维护一下就可以了

posted @ 2024-02-27 09:37  wuhupai  阅读(16)  评论(0编辑  收藏  举报