树上 Kth father

towboa / 2023-08-21 / 原文

来源于 https://vjudge.net/problem/CodeForces-291E

 

void init(int x,int fa){
    val[x]=val[fa]*S+(ul)c[x];
    
    f[x][0]= fa; 
    for (int i=1;i<20;++i) 
        f[x][i]=f[f[x][i-1]][i-1];
        
    for (int y: g[x]) init(y,x);
}

 int find(int x,int k){
    for (int i=0;i<20;++i)
        if ((k>>i)&1) x=f[x][i];
        
    return x;
 }