LCA
文章平均质量分 94
Nekroz_
这个作者很懒,什么都没留下…
展开
-
【模板】最近公共祖先(树上倍增)
完整部分点这里有 N 种办法可以解决LCA问题,这里我们只讲一种,用树上倍增的方法来实现 LCA。在没有学习倍增写LCA之前,你是怎么样求LCA的呢?至少,我是老老实实地让这两个点一步一步往上移并找出它们的路径第一次交汇的地方。这种方法固然可行、好想,但它的效率实在不高。但是,我们完全可以通过提高“这两个点一步一步往上移”来提高效率。 所以,我们采用倍增的思路来预处理,分别记录这点的祖先...原创 2018-03-22 13:48:28 · 293 阅读 · 0 评论 -
【模板】LCA(欧拉序+RMQ)
平常在信息学竞赛中求LCA一般有三种办法:用倍增法求解,预处理复杂度是 O(nlogn)O(nlogn)O(n\log n) ,每次询问的复杂度是 O(logn)O(logn)O(\log n), 属于在线解法。利用欧拉序转化为RMQ问题,用 ST表 求解RMQ问题,预处理复杂度 O(n+nlogn)O(n+nlogn)O(n + n \log n) ,每次询问的复杂度为 O(1)O...原创 2018-08-04 16:23:14 · 3058 阅读 · 2 评论 -
【模板】LCA Tarjan算法
首先要说明,Tarjan算法是离线算法,需要在算法流程中读入全部询问,一次dfs出结果,然后再一次性输出来,复杂度为 O(α(n)+Q)O(α(n)+Q)O(\alpha (n) + Q) 。Tarjan算法的核心思想是先进行一遍深度优先搜索,在讨论 LCA与RMQ的关系 的时候,我们已经论述过 uuu 向 vvv 遍历过程中深度最小的点就是 LCA(T,u,v)LCA(T,u,v)LCA...原创 2018-08-06 16:17:53 · 368 阅读 · 0 评论 -
浅析LCA
1. 1. 1. \ 定义LCA(Least Common Ancestors),即最近公共祖先,指对于有根树 TTT 的两个结点 uuu 、vvv ,最近公共祖先 LCA(T,u,v)LCA(T,u,v)LCA(T, u, v) 表示一个结点 xxx, 满足 xxx 是 uuu、vvv 的祖先且 xxx 的深度尽可能大。 下面给出一个自己画的图,用来解释LCA及其算...原创 2018-08-06 16:30:29 · 14437 阅读 · 7 评论