LCA
定义
\(树上两点向上跳到最近の重点\)
1
/ \
2 3
/ \ \
4 5 6
// LCA( 4 , 5 ) = 2 ;
// LCA( 2 , 6 ) = 1 ;
如何求
倍增思想
设$x_1、x_2、x_3 ···· x_k \in Z $
总会有 \(\alpha\) = $ 2^{ x_1 } + ··· + 2^{ x _ k } $
( 不是很需要证 ... )
∴ 从大往小里跳
$ queryfather[ x ][ i ] = queryfather[ \ \ queryfather[ x ][ i - 1 ] \ \ ][ i - 1 ] $
$ code: $
void peikongLca( )
{
for( int i = 1 ; i <= n ; ++ i )
{
for( int j = 1 ; j < 20 ; ++ j )
{
queryfather[ i ][ j ] = queryfather[ queryfather[ i ][ j - 1 ] ][ j - 1 ] ;
}
}
}
求LCA
先把小的往上跳使深度相同
再一起往上跳
$\color{red} 注 \ \ \ \ \ \ 意 \ \ ! \ \ ! \ \ ! \ \ ! $
要跳到距LCA 1距离
标签:code,从大往,queryfather,int,小里,LCA From: https://www.cnblogs.com/hangry/p/17990568