Family tree of bob
unknown
c_cpp
a year ago
1.2 kB
6
Indexable
#include<bits/stdc++.h> using namespace std; #define ll long long int highestSetBit(int n){ int cnt=0; while(n!=0){ n/=2; cnt++; } return cnt-1; } void dfs(int u, int par, vector< vector<int> > &g, vector<bool> &visited, vector< vector<int> > &parent){ visited[u]=true; parent[u][0]=par; for(int i=1;i<20;i++){ parent[u][i]=parent[parent[u][i-1]][i-1]; } for(int i=0;i<g[u].size();i++){ int v=g[u][i]; if(!visited[v]){ dfs(v,u,g,visited,parent); } } return; } void solve() { int n,q; cin>>n>>q; vector< vector<int> > g(n+1, vector<int>() ); vector<bool> visited(n+1, false); for(int i=0;i<n-1;i++){ int u,v; cin>>u>>v; g[u].push_back(v); g[v].push_back(u); } vector<vector<int> > parent(n+1, vector<int> (20, 0)); for(int i=0;i<n+1;i++){ for(int j=0;j<20;j++){ parent[i][j]=0; } } dfs(1,0,g,visited,parent); while(q--){ int u,k; cin>>u>>k; while(k!=0){ int hsb=highestSetBit(k); u=parent[u][hsb]; k=k-(1<<hsb); } if(u==0) u=-1; cout<<u<<endl; } return; } int main() { #ifndef ONLINE_JUDGE freopen("input.txt","r",stdin); freopen("output.txt","w",stdout); #endif solve(); return 0; } Language
Editor is loading...
Leave a Comment