Cod sursa(job #248720)

Utilizator eugen.nodeaEugen Nodea eugen.nodea Data 26 ianuarie 2009 18:03:37
Problema Cerere Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.63 kb
# include <stdio.h>
# define nmax 100001
long A[nmax][200],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;
}