Pagini recente » Cod sursa (job #915079) | Cod sursa (job #2297003) | Rating Ciobotaru Cosmin-Andrei (cosminnnn) | Cod sursa (job #2302720) | Cod sursa (job #261914)
Cod sursa(job #261914)
#include<stdio.h>
#define Nmax 250000
#define Mmax 300000
long n,m,cer[Mmax],t[Nmax],viz[Nmax],vec[Nmax];
struct cereri
{
long inf,nr;
cereri *urm;
}*c[Nmax];
struct elem
{
long inf;
elem *urm;
}*a[Nmax];
void citire()
{
cereri *p;
elem *q;
long i,ce,x;
freopen("stramosi.in","r",stdin);
scanf("%ld %ld",&n,&m);
for(i=1;i<=n;i++)
{
scanf("%ld",&t[i]);
if(t[i]!=0)
{
q=new elem;
q->inf=i;
q->urm=a[t[i]];
a[t[i]]=q;
}
}
for(i=1;i<=m;i++)
{
scanf("%ld %ld",&x,&ce);
p=new cereri;
p->inf=ce;
p->nr=i;
p->urm=c[x];
c[x]=p;
}
fclose(stdin);
}
void parcurg(long x,long niv)
{
elem *p;
vec[niv]=x;
viz[x]=1;
cereri *q;
for(q=c[x];q;q=q->urm)
{
if(q->inf>niv)
cer[q->nr]=0;
else
cer[q->nr]=vec[niv-q->inf];
}
for(p=a[x];p;p=p->urm)
{
if(viz[p->inf]==0)
{
parcurg(p->inf,niv+1);
}
}
}
void afisare()
{
freopen("stramosi.out","w",stdout);
long i;
for(i=1;i<=m;i++)
{
printf("%ld\n",cer[i]);
}
fclose(stdout);
}
int main()
{
long i;
citire();
for(i=1;i<=n;i++)
if(t[i]==0)
parcurg(i,0);
afisare();
return 0;
}