Pagini recente » Cod sursa (job #1789782) | Cod sursa (job #2142603) | Cod sursa (job #120539) | Cod sursa (job #1357283) | Cod sursa (job #2469912)
#include <iostream>
#include <stdio.h>
#include <vector>
using namespace std;
const int NMAX = 100001;
vector <int> v[NMAX];
int val[NMAX], d[NMAX], k[NMAX];
void DFS (int nod, int m) {
// int i;
d[m] = nod;
if (k[nod] == 0)
val[nod] = 0;
else
val[nod] = val[d[m - k[nod]]] + 1;
for (int fiu : v[nod]) {
// fiu = v[nod][i];
DFS (fiu, m + 1);
}
}
int main() {
freopen ("cerere.in", "r", stdin);
freopen ("cerere.out", "w", stdout);
int n, i, s, r, a, b;
scanf ("%d", &n);
for (i = 1; i <= n; i++)
scanf ("%d", &k[i]);
s = 0;
for (i = 1; i < n; i++) {
scanf ("%d%d", &a, &b);
v[a].push_back(b);
s += b;
}
r = n * (n + 1) / 2 - s;
DFS(r, 1);
for (i = 1; i <= n; i++)
printf ("%d ", val[i]);
return 0;
}