Pagini recente » Cod sursa (job #418684) | Cod sursa (job #2423162) | Cod sursa (job #2490351) | Cod sursa (job #97518) | Cod sursa (job #180793)
Cod sursa(job #180793)
#include <stdio.h>
#define NMAX 100001
int st[NMAX], N, p[NMAX], t[NMAX], r[NMAX];
struct NOD
{
int info;
NOD *next;
};
NOD *m[NMAX];
void adaug(int a, int b)
{
NOD *aux;
aux = new NOD;
aux -> info = b;
aux -> next = m[a];
m[a] = aux;
}
void DF(int nod, int nr)
{
NOD *aux;
st[nr] = nod;
if ( p[nod] != 0)
r[nod] = r[ st[nr - p[nod]] ] + 1;
for ( aux = m[nod]; aux; aux = aux -> next)
DF( aux->info, nr + 1);
}
int main()
{
int i, a, b, R;
freopen("cerere.in", "r", stdin);
freopen("cerere.out", "w", stdout);
scanf("%d", &N);
for ( i = 1; i <= N; i++)
scanf("%d", &p[i]);
for ( i = 1; i < N; i++)
{
scanf("%d %d", &a, &b);
adaug(a, b);
t[b] = a;
}
for ( i = 1; i <= N; i++)
if ( !t[i] )
{
R = i;
break;
}
DF(R, 1);
for ( i = 1; i <= N; i++)
printf("%d ", r[i]);
return 0;
}