Pagini recente » Cod sursa (job #989978) | Cod sursa (job #1846710) | Cod sursa (job #1542870) | Cod sursa (job #697602) | Cod sursa (job #349998)
Cod sursa(job #349998)
#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;
}