Pagini recente » Cod sursa (job #3156003) | Cod sursa (job #1738704) | Cod sursa (job #952000) | Cod sursa (job #1703650) | Cod sursa (job #1501836)
#include <cstdio>
#include <algorithm>
#include <vector>
#define DIM 1000010
using namespace std;
int Father[DIM], Answer[DIM], Stack[DIM];
vector <int> List[DIM]; int X, Y, N, M;
vector <pair <int, int> > Query[DIM];
void DFS (int node, int pos)
{
Stack[pos] = node;
vector <pair <int, int> > :: iterator it1;
for (it1 = Query[node].begin(); it1 != Query[node].end(); it1 ++)
{
pair <int, int> vec = *it1;
Answer[vec.first] = Stack[max(0, pos - vec.second)];
}
vector <int> :: iterator it2;
for (it2 = List[node].begin(); it2 != List[node].end(); it2 ++)
{
int vec = *it2;
DFS (vec, pos + 1);
}
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", &Father[i]);
List[Father[i]].push_back(i);
}
for (int i = 1; i <= M; i ++)
{
scanf("%d %d", &X, &Y);
Query[X].push_back(make_pair(i, Y));
}
DFS(0, 0);
for (int i = 1; i <= M; i ++)
printf ("%d\n", Answer[i]);
fclose (stdin );
fclose (stdout);
return 0;
}