ADDED lib/dataStructure/lca.cpp Index: lib/dataStructure/lca.cpp ================================================================== --- lib/dataStructure/lca.cpp +++ lib/dataStructure/lca.cpp @@ -0,0 +1,39 @@ +//------------------------------------------------------------- +// The Least Common Ancestor +// +// Verified by +// - ICPC 2021 Yokohama Regional I +//------------------------------------------------------------- + + +template +struct Lca +{ + const int N; + const vector& depth; + vector> jump; + Lca(int N, const vector& parent, const vector& depth) + : N(N), depth(depth), jump(K, vector(N, -1)) + { + jump[0] = parent; + for(int k=0; k+1depth[b]) swap(a,b); + for(int k=0; k=0; --k) + if(jump[k][a] != jump[k][b]) { + a = jump[k][a]; + b = jump[k][b]; + } + return jump[0][a]; + } +};