LCA模板

来源:互联网 发布:上饶招聘中年淘宝模特 编辑:程序博客网 时间:2024/06/04 18:57

Description

LCA就是在一棵树中求x与y的最近公共祖先,复杂度O(nlogn)
首先f[i][j]表示i节点向上跳2j个能跳到f[i][j],deep[i]表示i在树中的深度。
步骤:1、首先把x和y跳到同一个深度当中;2、然后使x和y调到同一个点中。

Code

发现了一种十分优美的LCA打法。

int lca(int x,int y){    int i;    if(deep[x]<deep[y])swap(x,y);    fod(i,19,0)if(deep[f[x][i]]>deep[y])x=f[x][i];    if(deep[x]!=deep[y])x=f[x][0];    fod(i,19,0)if(f[x][i]!=f[y][i])x=f[x][i],y=f[y][i];    if(x!=y)return f[x][0];else return x;}
1 0
原创粉丝点击