码迷,mamicode.com
首页 > 其他好文 > 详细

【数据结构】浅谈倍增求LCA

时间:2018-10-11 23:47:27      阅读:545      评论:0      收藏:0      [点我收藏+]

标签:使用   str   否则   处理   数据结构   nbsp   节点   思路   父节点   

思路

运用树上倍增法可以高效率地求出两点x,y的公共祖先LCA

我们设f[x][k]表示x的2k辈祖先

f[x][0]为x的父节点

因为从x向根节点走2k 可以看成从x走2k-1步 再走2k-1

所以对于1≤k≤logn 有f[x][k]=f[f[x][k-1]][k-1] (类似二分思想)

预处理:

因此我们可以对树进行遍历后得到所有f[x][0] 再计算出f数组的所有值

求LCA:

设dep[x]为x的深度 设dep[x]≥dep[y](否则 可以交换x和y)

使用二进制拆分 把x和y调整到同一深度

若此时

 

【数据结构】浅谈倍增求LCA

标签:使用   str   否则   处理   数据结构   nbsp   节点   思路   父节点   

原文地址:https://www.cnblogs.com/BrokenString/p/9775540.html

(2)
(1)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!