模板—树上倍增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 }
某次考试因为不会写板子,自己造出来的,所以有点丑……
波澜前,面不惊。