#include #define P(x,y) make_pair(x,y) using namespace std; const int MX=100009 , MXL=18; // set those to appropriate values vector < int > v[MX]; int n , QN , depth[MX] , par[MXL][MX] ; int sum[MX] ; void Pdfs(int x , int p){ int nxt , C , sz=v[x].size(); for(int j=0;j depth[b]) swap(a , b); b=Kth(b , depth[b]-depth[a]); if(a==b) return b; for(int j=MXL-1;j>=0;j--) if(par[j][a] != par[j][b]) a=par[j][a] , b=par[j][b]; return par[0][a]; } int main(){ for(int j=1;j<=n;j++) v[j].clear(); memset(par , 0 , sizeof(par)); depth[1]=1; Pdfs(1 , -1); process(); }