Pagini recente » Cod sursa (job #1735672) | Cod sursa (job #27277) | Cod sursa (job #2640828) | Cod sursa (job #289200) | Cod sursa (job #1232023)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
struct nod
{
int inf1,inf2;
nod *urm;
};
struct nd
{
int inf;
nd *urm;
};
int n,m,a[250010],r[300010],st[250010],vf;
nod *l[300010];
nd *lst[300010];
void citire()
{
int x,y;
nod *p;
nd *q;
fin>>n>>m;
for(int i=1;i<=n;i++)
{
fin>>x;
q=new nd;
q->inf=i;
q->urm=lst[x];
lst[x]=q;
}
for(int i=1;i<=m;i++)
{
fin>>x>>y;
p=new nod;
p->inf1=i;
p->inf2=y;
p->urm=l[x];
l[x]=p;
}
}
void dfs(int k)
{
st[++vf]=k;
int x;
x=st[vf];
for(nod *p=l[x];p;p=p->urm)
{
if(vf-p->inf2>1)
r[p->inf1]=st[vf-p->inf2];
else
r[p->inf1]=0;
}
for(nd *p=lst[x];p;p=p->urm)
dfs(p->inf);
st[vf--]=0;
}
void afisare()
{
for(int i=1;i<=m;i++)
fout<<r[i]<<"\n";
}
int main()
{
citire();
dfs(0);
afisare();
return 0;
}