Pagini recente » Cod sursa (job #182075) | Cod sursa (job #2727709) | Cod sursa (job #2931974) | Cod sursa (job #2547387) | Cod sursa (job #2469910)
#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, fiu;
m++;
d[m] = nod;
if (k[nod] == 0)
val[nod] = 0;
else
val[nod] = val[d[m - k[nod]]] + 1;
for (i = 0; i < v[nod].size(); i++) {
fiu = v[nod][i];
DFS (fiu, m);
}
}
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, 0);
for (i = 1; i <= n; i++)
printf ("%d ", val[i]);
return 0;
}