Pagini recente » Cod sursa (job #1781674) | Cod sursa (job #2282643) | Cod sursa (job #2584079) | Cod sursa (job #153295) | Cod sursa (job #248724)
Cod sursa(job #248724)
# include <stdio.h>
# define nmax 100001
struct nod{
long v;
nod *ad;
}*A[nmax];
long N,st[nmax],num[nmax],k[nmax],S[nmax];
void df(long n, long K)
{
nod *p;
st[K]=n;
if (k[n]) num[n]=num[st[K-k[n]]]+1;
p=A[n];
while (p!=NULL) {
df(p->v,K+1); p=p->ad;
}
}
int main(){
long i,x,s,y;
nod *q;
freopen("cerere.in", "r", stdin);
freopen("cerere.out", "w", stdout);
scanf("%ld",&N);
for (i=1;i<=N;i++)
scanf("%ld",&k[i]);
for (i=1;i<N;i++){
scanf("%ld %ld",&x,&y);
S[y]=1;
q=new nod; q->v=y;
if (A[x]==NULL) q->ad=NULL, A[x]=q;
else q->ad=A[x]; A[x]=q;
}
for (i=1;i<=N;i++)
if (S[i]==0) {s=i; break;}
df(s,1);
for (i=1;i<=N;i++)
printf("%ld ",num[i]);
return 0;
}