Pagini recente » Cod sursa (job #2487659) | Cod sursa (job #3239607) | Cod sursa (job #40668) | Cod sursa (job #1310205) | Cod sursa (job #235950)
Cod sursa(job #235950)
#include <stdio.h>
#include <algorithm>
#define mx 1000010
using namespace std;
struct nod
{
int nr;
nod *ua;
} *l[mx];
bool t[mx];
int alks[mx], ad[mx], stv[mx];
int n, x, y, rad_arb;
void clad(int t, int f)
{
nod *p = new nod;
p->nr = f;
p->ua = l[t];
l[t] = p;
}
void calc(int x, int lvl)
{
stv[lvl] = x;
ad[x] = ad[stv[lvl - alks[x]]] + 1;
for (nod *p = l[x]; p; p = p->ua)
calc(p->nr, lvl + 1);
}
int main()
{
freopen("cerere.in","r",stdin);
freopen("cerere.out","w",stdout);
scanf("%ld", &n);
for (int i = 1; i <= n; i++)
scanf("%ld", &alks[i]);
for (int i = 1; i < n; i++)
{
scanf("%ld %ld", &x, &y);
t[y] = 1;
clad(x, y);
}
for (int i = 1; i <= n; i++)
if (!t[i])
rad_arb = i;
calc(rad_arb, 1);
for (int i = 1; i <= n; i++)
printf("%ld ", ad[i] - 1);
fclose(stdin);
fclose(stdout);
return 0;
}