Pagini recente » Cod sursa (job #3005408) | Cod sursa (job #533394) | Cod sursa (job #2607626) | Cod sursa (job #2258430) | Cod sursa (job #429379)
Cod sursa(job #429379)
#include <cstdio>
#include <vector>
using namespace std;
int n, K[100100];
int DEG[100100];
int SOL[100100];
vector<int> G[100100];
int DFS[100100];
void solve(int nod, int lev) {
DFS[lev] = nod;
if (K[nod] == 0) SOL[nod] = 0;
else SOL[nod] = 1 + SOL[DFS[lev - K[nod]]];
for (int i = 0; i < G[nod].size(); ++i) solve(G[nod][i], lev + 1);
}
int main() {
freopen("cerere.in", "r", stdin);
freopen("cerere.out", "w", stdout);
scanf("%d", &n);
for (int i = 1; i <= n; ++i) scanf("%d", &K[i]);
for (int i = 1; i < n; ++i) {
int a, b;
scanf("%d %d", &a, &b);
G[a].push_back(b);
DEG[b]++;
}
for (int i = 1; i <= n; ++i) if (DEG[i] == 0) {
solve(i, 1);
}
for (int i = 1; i <= n; ++i) {
if (i!=1) printf(" ");
printf("%d", SOL[i]);
}
printf("\n");
return 0;
}