Cod sursa(job #248724)

Utilizator eugen.nodeaEugen Nodea eugen.nodea Data 26 ianuarie 2009 18:28:04
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
# 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;
}