Pagini recente » Cod sursa (job #2831107) | Cod sursa (job #3199919) | Cod sursa (job #453267) | Cod sursa (job #1658529) | Cod sursa (job #730575)
Cod sursa(job #730575)
#include<fstream>
#include<vector>
#define nmax 350000
#define mmax 400000
using namespace std;
ifstream f("stramosi.in");
ofstream g("stramosi.out");
vector<int>G[nmax];
vector< pair < int , int > >L[mmax];
int Find[mmax],St[nmax],q,p,ii,nod,n,m,i,x;
bool viz[nmax];
void dfs(int nd,int niv) {
St[niv]=nd;
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)
dfs(G[nd][i],niv+1);
}
int main () {
f>>n>>m;
for(i=1;i<=n;i++){
f>>x;
G[x].push_back(i);
}
for( i=1 ; i<=m ; i++ ){
f>>q>>p;
L[q].push_back(make_pair(i,p));
}
dfs(0,0);
for(i=1;i<=m;i++)
g<<Find[i]<<"\n";
return 0;
}