Cod sursa(job #808229)
#include<fstream>
using namespace std;
ifstream f("stramosi.in");
ofstream g("stramosi.out");
#define nmax 250010
#define mmax 300010
int n,m,r[mmax],st[nmax];
struct nod
{
int nr;
nod *adr;
} *v[nmax];
struct intr
{
int nr;
int s;
intr *adr;
} *x[nmax];
void cit()
{
f>>n>>m;
int z,i,k,l;
for(i=1;i<=n;i++)
{
f>>z;
nod *p=new nod;
p->nr=i;
p->adr=v[z];
v[z]=p;
}
for(i=1;i<=m;i++)
{
f>>k>>l;
intr *p=new intr;
p->nr=i;
p->s=l;
p->adr=x[k];
x[k]=p;
}
}
void raspund(int nd,int niv)
{
for(intr *p=x[nd];p!=NULL;p=p->adr)
{
if(niv-x[nd]->s>0)
{
r[x[nd]->nr]=st[niv-x[nd]->s];
}
}
}
void dfs(int nd,int niv)
{
st[niv]=nd;
raspund(nd,niv);
for(nod *p=v[nd];p!=NULL;p=p->adr)
{
dfs(p->nr,niv+1);
}
}
void afis()
{
for(int i=1;i<=m;i++)
g<<r[i]<<'\n';
}
int main()
{
cit();
for(nod *p=v[0];p!=NULL;p=p->adr)
{
dfs(p->nr,1);
}
afis();
return 0;
}