倍增法可以有很多变化 。
1.用 data[ i ][ j ]记录从i 到他的第2j 个父亲的路径长度,就可以边求LCA边求出两点距离,因为data[i][j]满足倍增的递推式:
data[ i ][ j ]=data[ i ][ j-1 ]+data[ fa[i][j-1] ][ j-1 ]。
2. 用maxlen[ i ][ j ]记录i到第2^j^ 个父亲的路径上最长边的边权,它满足
maxlen[ i ][ j ]=max{maxlen[ i ][ j-1 ],maxlen[ fa[ i ][ j-1] ][ j-1 ] }
可以快速求两点路径上最长边的边权