Pagini recente » Cod sursa (job #2472571) | Cod sursa (job #950857) | Cod sursa (job #762206) | Cod sursa (job #1773431) | Cod sursa (job #393345)
Cod sursa(job #393345)
#include<stdio.h>
#include<vector>
#define Nmax 250010
#define Mmax 300010
using namespace std;
vector<int> V[Nmax],M[Nmax],Idx[Nmax];
int Sol[Mmax],n,i,j,S[Nmax],x,p,q,m;
void dfs(int nod, int nivel)
{
S[nivel]=nod;
int N=M[nod].size(),i;
for(i=0;i<N;i++)
if(nivel>M[nod][i]) Sol[ Idx[nod][i] ] = S[ nivel-M[nod][i] ];
N=V[nod].size();
for(i=0;i<N;i++)
dfs(V[nod][i],nivel+1);
}
int main()
{
freopen("stramosi.in","r",stdin);
freopen("stramosi.out","w",stdout);
scanf("%d %d",&n,&m);
for(i=1;i<=n;i++)
{
scanf("%d",&x);
V[x].push_back(i);
}
for(i=1;i<=m;i++)
{
scanf("%d %d",&q,&p);
M[q].push_back(p);
Idx[q].push_back(i);
}
dfs(0,1);
for(i=1;i<=m;i++)
printf("%d\n",Sol[i]);
return 0;
}