Pagini recente » Cod sursa (job #478949) | Cod sursa (job #3136708) | Profil Trilulilu | Cod sursa (job #1848740) | Cod sursa (job #1462425)
/*
How about a coding trick?
-Created by "EmanuelNrx"-
*/
#include <cstdio>
#include <vector>
#include <algorithm>
#define DIM 250010
using namespace std;
int N, M, K, X, Y, D[DIM+50000], St[DIM], T[DIM], Tata[DIM] val, pos, dep;
vector <int> V[DIM], Q[DIM];
void DFS(int nod){
T[nod] = T[Tata[nod]] + 1;
St[dep] = nod;
dep = T[nod];
for(int i = 0; i < Q[nod].size(); i += 2){
val = Q[nod][i+0];
pos = Q[nod][i+1];
if(dep - val >= 1)
D[pos] = St[dep - val];
else
D[pos] = 0;
}
for(int i = 0; i < V[nod].size(); i ++){
int vec = V[nod][i];
DFS(vec);
}
return;
}
int main(){
freopen("stramosi.in" ,"r", stdin );
freopen("stramosi.out","w", stdout);
scanf("%d %d", &N, &M);
for(int i = 1; i <= N; i ++){
scanf("%d", &X);
V[X].push_back(i);
Tata[i] = X;
}
for(int i = 1; i <= M; i ++){
scanf("%d %d", &X, &Y);
Q[X].push_back(Y);
Q[X].push_back(i);
}
DFS(0);
for(int i = 1; i <= M; i ++)
printf("%d\n", D[i]);
fclose(stdin );
fclose(stdout);
return 0;
}