Pagini recente » Cod sursa (job #218910) | Cod sursa (job #2590298) | Cod sursa (job #1689172) | Cod sursa (job #1901625) | Cod sursa (job #730584)
Cod sursa(job #730584)
#include<cstdio>
#include<bitset>
#include<vector>
#define nmax 250009
#define mmax 300009
using namespace std;
vector<int>G[nmax];
vector< pair < int , int > >L[nmax];
int Find[mmax],St[nmax],q,p,ii,nod,niv,n,m;
bitset < 300009 > viz;
void dfs(int nd) {
St[++niv]=nd;
viz[nd]=1;
for(int i=0;i<L[nd].size();++i){
ii=L[nd][i].first;
nod=L[nd][i].second;
if(niv<nod)
Find[ii]=0;
else
Find[ii]=St[niv-nod];
}
for(int i=0;i<G[nd].size();++i)
if(!viz[G[nd][i]])
dfs(G[nd][i]);
--niv;
}
int main () {
freopen("stramosi.in","r",stdin);
freopen("stramosi.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
int x;
scanf("%d",&x);
G[x].push_back(i);
}
for( int i=1 ; i<=m ; i++ ){
scanf("%d%d",&q,&p);
L[q].push_back(make_pair(i,p));
}
dfs(0);
for(int i=1;i<=m;i++)
printf("%d\n",Find[i]);
return 0;
}