![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
lca
Black__wing
acm菜鸡
展开
-
lca学习心得
lca求树上两点最近的公共祖先。对于树上两点最近的公共祖先,我们首先能想到的办法,就是暴力,如果深度不相同先调整到相同深度,如果深度相等了,祖先不同的话,就继续向上找,直到找到相同的公共祖先。但是这样的方法,显然速度太慢,那么我们该怎么寻找两个点最近的公共祖先呢?我们可以处理一颗树上的所有点将其所有的2的次幂的祖先处理出来,放在一个数组中,寻找两个点共同公共祖先时,首先将两个点深度调到...原创 2018-09-05 20:27:20 · 291 阅读 · 0 评论 -
树上倍增
对于在树上查找某点的祖先,如果简单的查找时间复杂度是o(n),那么,我们可以通过倍增算法优化这个时间复杂度,将每次跳一个点变成,每次跳2的i次方个点,也就是倍增优化这个过程,将时间复杂度变为o(logn)。如何进行倍增?首先我们需要进行一遍dfs初始化,处理出每个点的深度。根据深度,初始化fa[now][i],fa数组存的是now节点的2得i次方倍祖先。这样处理完成后,我们来看树上倍增...原创 2019-01-16 16:30:01 · 1746 阅读 · 1 评论