Pagini recente » Cod sursa (job #534904) | Cod sursa (job #2937982) | Cod sursa (job #3292631) | Cod sursa (job #1210105) | Cod sursa (job #281581)
Cod sursa(job #281581)
using namespace std;
#define Nmax 300000
#include<cstdio>
struct nod { int v; nod* next;};
struct bla {int cati,poz; bla *urm;};
bla *q[Nmax];
nod * a[Nmax];
int n,m,viz[Nmax],sol[Nmax],stiva[Nmax];
void add(int i,int j)
{
nod *p=new nod;
p->v=i;
p->next=a[j];
a[j]=p;
}
void add2(int i,int j,int k)
{
bla*p=new bla;
p->cati=j;
p->poz=k;
p->urm=q[i];
q[i]=p;
}
void read()
{
int i,j,k;
freopen("stramosi.in","r",stdin);
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
{
scanf("%d",&j);
add(i,j);
}
for(i=1;i<=m;i++)
{
scanf("%d%d",&j,&k);
add2(j,k,i);
}
}
void dfs(int i,int j)
{
stiva[i]=j;
for(bla *p=q[j];p;p=p->urm)
if(i-p->cati>=0)
sol[p->poz]=stiva[i-p->cati];
else sol[p->poz]=0;
viz[j]=1;
for(nod*u=a[j];u;u=u->next)
if(!viz[u->v])
{
dfs(i+1,u->v);
}
}
int main()
{
int i;
read();
for(i=1;i<=n;i++)
if(!viz[i]) dfs(0,i);
freopen("stramosi.out","w",stdout);
for(i=1;i<=m;i++)
printf("%d\n",sol[i]);
return 0;
}