Pagini recente » Cod sursa (job #2446625) | Cod sursa (job #669320) | Cod sursa (job #1522826) | Cod sursa (job #606068) | Cod sursa (job #1858242)
#include <cstdio>
#include <vector>
#include <stack>
using namespace std;
int euler[250005];
vector <int> v[250005];
struct thing{
int ancestor, id;
};
int ans[300005];
vector <thing> Q[300005];
stack < pair<int, int> > s;
int cnt = -1;
int main()
{
freopen("stramosi.in", "r", stdin);
freopen("stramosi.out", "w", stdout);
int n,q,x,y,i;
scanf("%d %d", &n, &q);
for(i = 1;i <= n;i++){
scanf("%d", &x);
v[x].push_back(i);
}
thing ax;
for(i = 1;i <= q;i++){
scanf("%d %d", &x, &y);
ax.ancestor = y;
ax.id = i;
Q[x].push_back(ax);
}
s.push({0, 0});
while(s.empty() == false){
int node = s.top().first;
int depth = s.top().second;
euler[depth] = node;
s.pop();
for(auto it : Q[node]){
ans[it.id] = euler[depth - it.ancestor];
}
for(auto it : v[node]){
s.push({it, depth + 1});
}
}
for(i = 1;i <= q;i++){
printf("%d\n", ans[i]);
}
return 0;
}