Pagini recente » Cod sursa (job #3144515) | Cod sursa (job #840998) | Cod sursa (job #306553) | Cod sursa (job #2974608) | Cod sursa (job #274922)
Cod sursa(job #274922)
#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-1;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);
}
void parcurg(long x,long niv)
{
elem *p;
vec[niv]=x;
long rt=nx[x];
if(nx[x]!=0)
nx[x]=nx[vec[niv-rt]]+1;
else
nx[x]=0;
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 ",nx[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;
}