Pagini recente » Cod sursa (job #2988818) | Cod sursa (job #2347184) | Cod sursa (job #2973835) | Cod sursa (job #458107) | Cod sursa (job #267206)
Cod sursa(job #267206)
#include<stdio.h>
#define Nmax 101000
long fin[Nmax],n,t[Nmax],vec[Nmax],nx[Nmax],aj[Nmax];
struct elem
{
long inf;
elem *urm;
}*a[Nmax];
void citire()
{
long i,tat,fiu;
freopen("cerere.in","r",stdin);
scanf("%ld",&n);
for(i=1;i<=n;i++)
scanf("%ld",&nx[i]);
elem *p;
for(i=1;i<=n;i++)
{
scanf("%ld %ld",&tat,&fiu);
aj[fiu]=1;
t[fiu]=tat;
p=new elem;
p->inf=fiu;
p->urm=a[tat];
a[tat]=p;
}
fclose(stdin);
}
long rezolv(long x)
{
long cv=0;
while(nx[vec[x]]!=0)
{ x=x-nx[vec[x]];
cv++;
}
return cv;
}
void parcurg(long x,long niv)
{
elem *p;
vec[niv]=x;
fin[x]=rezolv(niv);
for(p=a[x];p;p=p->urm)
parcurg(p->inf,niv+1);
}
void afisare()
{
freopen("cerere.out","w",stdout);
long i;
for(i=1;i<=n;i++)
{
printf("%ld ",fin[i]);
}
printf("\n");
fclose(stdout);
}
int main()
{
long i;
citire();
for(i=1;i<=n;i++)
if(aj[i]==0)
parcurg(i,0);
afisare();
return 0;
}