Pagini recente » Cod sursa (job #531943) | Cod sursa (job #1140314) | Istoria paginii runda/kikis_delivery_service | Cod sursa (job #1230548) | Cod sursa (job #1744583)
#include <bits/stdc++.h>
using namespace std;
const int NMAX = 100005;
vector<int> stk, g[NMAX];
int ant[NMAX], k[NMAX];
bool f[NMAX];
int n;
void dfs(int u) {
stk.push_back(u);
if(k[u])
ant[u] = ant[stk[stk.size()-k[u]-1]] + 1;
for(int v:g[u])
dfs(v);
stk.pop_back();
}
int main(void) {
freopen("cerere.in", "r", stdin);
freopen("cerere.out", "w", stdout);
int a, b;
scanf("%d",&n);
for(int i=1; i<=n; ++i) {
scanf("%d",&k[i]);
}
for(int i=1; i<n; ++i) {
scanf("%d%d",&a,&b);
g[a].push_back(b);
f[b] = true;
}
for(int i=1; i<=n; ++i) {
if(!f[i]) {
dfs(i);
break;
}
}
for(int i=1; i<=n; ++i)
printf("%d ",ant[i]);
printf("\n");
fclose(stdin);
fclose(stdout);
return 0;
}