Pagini recente » Cod sursa (job #2752642) | Cod sursa (job #1666238) | Cod sursa (job #116324) | Cod sursa (job #876945) | Cod sursa (job #248719)
Cod sursa(job #248719)
# include <stdio.h>
# define nmax 100001
long A[nmax][10000],N,st[nmax],K=-1,num[nmax],k[nmax],S[nmax];
void df(long n)
{
int i;
st[++K]=n;
if (k[n]) num[n]=num[K-k[n]]+1;
for (i=1;i<=A[n][0];i++)
df(A[n][i]);
--K;
}
int main(){
long i,x,s,y;
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;
A[x][0]++;
A[x][A[x][0]]=y;
}
for (i=1;i<=N;i++)
if (S[i]==0) {s=i; break;}
df(s);
for (i=1;i<=N;i++)
printf("%ld ",num[i]);
return 0;
}