好久没有更新了,来写 $(shui)$ 一篇 $LCA$ 的博客。
以前觉得 $LCA$ $($最近公共祖先$)$是神仙学的东西, $fj$ 讲的时候我也贼吉尔懵逼,现在看来也没有那么难。
当我们想求 $LCA(x,y)$ 时,如果一格一格跳直到跳到同一位置,不知道会跳到哪一年去,于是我们用到了一个神奇的东西:倍增。
众所周知任何数都可以用二进制,所以我们可以每次跳 $2^i$ 步,大大加快效率。这里我们用 $fa[i][j]$ 代表第 $i$ 号节点往上跳 $2^j$ 步到达的位置。所以很容易推出来: $fa[i][j]=fa[fa[i][j-1]][j-1]$ 。
代码
1 |
|