Pagini recente » Cod sursa (job #2051801) | Cod sursa (job #1794279) | Cod sursa (job #643651) | Cod sursa (job #869563) | Cod sursa (job #730315)
Cod sursa(job #730315)
#include<fstream>
#include<vector>
#define lim2 300005
#define lim1 250005
using namespace std;
ifstream f("stramosi.in");
ofstream g("stramosi.out");
vector<int>V[lim1];
vector< pair < int , int > >G[lim2];
int QQ[lim2];
int p,q,n,Q,i,x,idx,nd;
int Stiva[lim2];
int viz[lim1];
void dfs(int nod,int niv ) {
Stiva[niv]=nod;
viz[nod]=1;
for(int i=0;i<G[nod].size();++i){
idx=G[nod][i].first;
nd=G[nod][i].second;
if(idx<niv)
QQ[nd]=Stiva[niv-idx];
else
QQ[nd]=0;
}
for(int i=0;i<V[nod].size();++i){
x=V[nod][i];
if(!viz[V[nod][i]])
dfs(x,niv+1);
}
}
int main () {
f>>n>>q;
for(i=1;i<=n;i++){
f>>x;
V[x].push_back(i);
}
for(i=1;i<=q;i++){
f>>Q>>p;
G[Q].push_back(make_pair(p,i));
}
dfs(0,0);
for(i=1;i<=q;i++)
g<<QQ[i]<<"\n";
return 0;
}