Pagini recente » Cod sursa (job #3347159) | Cod sursa (job #3319749) | Cod sursa (job #2828145) | Cod sursa (job #3350889) | Cod sursa (job #3345689)
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("stramosi.in");
ofstream cout("stramosi.out");
int up[250005][20];
vector<int>adj[250005];
void dfs(int nod,int ant){
up[nod][0]=ant;
for(int i=1;i<20;i++){
up[nod][i]=up[up[nod][i-1]][i-1];
}
for(auto e:adj[nod]){
if(e!=ant) dfs(e,nod);
}
}
int query(int nod,int p){
for(int i=19;i>=0;i--){
if(p>=(1<<i)){
nod=up[nod][i];
p-=(1<<i);
}
}
return nod;
}
int main()
{
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++){
int x;
cin>>x;
adj[x].push_back(i);
adj[i].push_back(x);
}
dfs(0,0);
while(m--){
int nod,p;
cin>>nod>>p;
cout<<query(nod,p)<<'\n';
}
return 0;
}