Cod sursa(job #124733)

Utilizator razvi9Jurca Razvan razvi9 Data 19 ianuarie 2008 19:53:39
Problema Cerere Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.64 kb
#include<stdio.h>
int t[100001],a[100001],s[100001],n,i,x,y,k[100001],j,nr,fii[100001],*b[100001];

void df(int vf,int lg)
{s[lg]=vf;
 if(k[vf]) a[vf]=a[s[lg-k[vf]]]+1;
 for(int i=1;i<=b[i][0];i++)
  df(b[i][0],lg+1);}


int main()
{freopen("cerere.in","r",stdin);
 freopen("cerere.out","w",stdout);
 scanf("%d",&n);
 for(i=1;i<=n;i++)  scanf("%d",&k[i]);
 for(j=1;j<n;j++) {scanf("%d %d",&y,&x);t[x]=y;fii[y]++;}
 for(i=1;i<=n;i++) {b[i]=new int[fii[i]+2]; b[i][0]=0;}
 for(i=1;i<=n;i++)
  b[t[i]][++b[t[i]][0]]=i;
 for(i=1;i<=n;i++) if(!t[i]) break;
 df(i,1);
 for(i=1;i<=n;i++)
  printf("%d ",a[i]);
 fclose(stdout); 
 return 0;}