Cod sursa(job #349998)

Utilizator Eric_CartmanEric Cartman Eric_Cartman Data 22 septembrie 2009 09:47:09
Problema Cerere Scor 15
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include<stdio.h>
#define nmax 50000

int a[nmax], t[nmax], rez[nmax], n, p, u, x, y, i;


void trace(int x) //merge pe arbore in sus pana la stramosul Ki
{
 int s, j;

 s=x;
 if(a[x]==0) rez[x]=0;
	 else  {
		for(j=1;j<=a[x];j++)
		s=t[s];

		rez[x]=rez[s]+1;
		}

}



int main()
{
 freopen("cerere.in", "r", stdin);
 freopen("cerere.out", "w", stdout);


 int c[nmax];
 int f[nmax][10]; //->vector de fii

 scanf("%d", &n);

 for(i=1;i<=n;i++)
   {
    scanf("%d" , &a[i]);
    f[x][0]=0;
    }

 for(i=1;i<n;i++)
    {
     scanf("%d %d", &x, &y);
     t[y]=x;
     f[x][0]++; //->retine cati fi are
     f[x][f[x][0]]=y; //->retine fii
     }

 for(i=1;i<=n;i++) if(t[i]==0) break;
 c[1]=i;


// GOD IS REAL,unless declared integer
 p=u=1;

 while(p<=u)
 {
  for(i=1 ; i<= f[c[p]][0] ; i++){
				  u++;
				  c[u]=f[c[p]][i];

				  trace(c[u]);
				  }

  p++;
  }


 for(i=1;i<=n;i++)
   printf("%d ", rez[i]);

 return 0;
}