Pagini recente » Cod sursa (job #1500084) | Cod sursa (job #2056751) | Cod sursa (job #2849095) | Cod sursa (job #232785) | Cod sursa (job #609944)
Cod sursa(job #609944)
# include <cstdio>
# include <vector>
using namespace std;
const char *FIN = "cerere.in", *FOU = "cerere.out";
const int MAX = 100005;
int N, K[MAX], S[MAX], stiva[MAX], T[MAX];
vector <int> G[MAX];
void dfs (int nod, int lev) {
stiva[lev] = nod;
S[nod] = K[nod] ? S[stiva[lev - K[nod]]] + 1 : 0;
for (vector <int> :: iterator it = G[nod].begin (); it != G[nod].end (); ++it)
dfs (*it, lev + 1);
}
int main (void) {
freopen (FIN, "r", stdin);
freopen (FOU, "w", stdout);
scanf ("%d", &N);
for (int i = 1; i <= N; ++i)
scanf ("%d", K + i);
for (int i = 1, x, y; i < N; ++i) {
scanf ("%d %d", &x, &y);
G[x].push_back (y), T[y] = 1;
}
for (int i = N; i; --i) {
if (T[i]) continue;
dfs (i, 1); break ;
}
for (int i = 1; i <= N; ++i)
printf ("%d ", S[i]);
}