模板—树上倍增LCA

 1 int LCA(int x,int y)
 2 {
 3     if(x==y)return x;
 4     if(dep[x]>dep[y])swap(x,y);
 5     while(dep[x]<dep[y])
 6         for(int i=0;;i++)
 7         if(dep[f[y][i]]<dep[x])
 8         {y=f[y][i-1];break;}
 9     if(x==y)return x;
10     while(f[x][0]!=f[y][0])
11         for(int i=0;;i++)
12         if(f[x][i]==f[y][i])
13         {x=f[x][i-1],y=f[y][i-1];break;}
14     return f[x][0];
15 }

某次考试因为不会写板子,自己造出来的,所以有点丑……

波澜前,面不惊。
原文地址:https://www.cnblogs.com/Al-Ca/p/11177190.html