Pagini recente » Cod sursa (job #2860787) | Cod sursa (job #2689662) | Cod sursa (job #3174081) | Cod sursa (job #2571538) | Cod sursa (job #2560222)
#include <iostream>
#include <cstdio>
#include <vector>
#define NMAX 100000
using namespace std;
int n, vf;
int k[NMAX + 5], ans[NMAX + 5], dad[NMAX + 5], st[NMAX + 5];
int rmq[17][NMAX + 5];
vector<int> v[NMAX + 5];
void dfs(int x) {
st[++vf] = x;
if(k[x] == 0)
ans[x] = 0;
else
ans[x] = ans[st[vf - k[x]]] + 1;
for(int y: v[x])
dfs(y);
--vf;
}
int main() {
freopen("cerere.in", "r", stdin);
freopen("cerere.out", "w", stdout);
int x, y;
scanf("%d", &n);
for(int i = 1; i <= n; ++i)
scanf("%d", &k[i]);
for(int i = 1; i < n; ++i) {
scanf("%d %d", &x, &y);
dad[y] = x;
v[x].push_back(y);
}
for(int i = 1; i <= n; ++i)
if(dad[i] == 0) {
dfs(i);
break;
}
for(int i = 1; i <= n; ++i)
printf("%d ", ans[i]);
return 0;
}