Pagini recente » Cod sursa (job #1301225) | Cod sursa (job #2765156) | Cod sursa (job #1979417) | Cod sursa (job #2367656) | Cod sursa (job #2052020)
#include <cstdio>
#include <vector>
const int MAX_N = 100000;
int K[MAX_N];
std::vector<int> G[MAX_N];
bool isSon[MAX_N];
int sol[MAX_N];
void dfs(int node, int t[MAX_N], int tSize) {
t[++tSize] = node;
for (auto u : G[node]) {
if (K[u] == 0) {
sol[u] = 0;
} else {
sol[u] = 1 + sol[t[tSize - K[u] + 1]];
}
dfs(u, t, tSize);
}
}
int main() {
freopen("cerere.in", "r", stdin);
freopen("cerere.out", "w", stdout);
int N;
scanf("%d", &N);
for (int i = 0; i < N; i++) {
scanf("%d", &K[i]);
}
for (int i = 0; i < N - 1; i++) {
int x, y;
scanf("%d%d", &x, &y);
x--;
y--;
G[x].push_back(y);
isSon[y] = true;
}
int rad = 0;
for (int node = 0; node < N; node++) {
if (!isSon[node]) {
rad = node;
break;
}
}
sol[rad] = 0;
int t[MAX_N];
dfs(rad, t, -1);
for (int i = 0; i < N; i++) {
printf("%d ", sol[i]);
}
printf("\n");
return 0;
}