Pagini recente » Cod sursa (job #341315) | Cod sursa (job #50803) | Cod sursa (job #1693107) | Cod sursa (job #888257) | Cod sursa (job #331299)
Cod sursa(job #331299)
#include <cstdio>
#include <vector>
#define dim 100001
using namespace std;
int n, k[dim], p[dim], in[dim], rad, q[dim], sol[dim];
vector<int> g[dim];
void dfs(int node, int lvl) {
vector<int>::iterator it;
q[lvl]=node;
if (k[node]) sol[node]=sol[q[lvl-k[node]]]+1;
else sol[node]=0;
for (it=g[node].begin(); it!=g[node].end(); ++it)
dfs(*it, lvl+1);
}
int main() {
int i, a, b;
freopen("cerere.in", "r", stdin);
freopen("cerere.out", "w", stdout);
scanf("%d\n", &n);
for (i=1; i<=n; ++i) scanf("%d ", &k[i]);
for (i=1; i<n; ++i) {
scanf("%d %d\n", &a, &b);
g[a].push_back(b);
p[b]=a;
++in[b];
}
for (rad=1; rad<=n && in[rad]; ++rad) ;
dfs(rad, 1);
for (i=1; i<=n; ++i) printf("%d ", sol[i]);
printf("\n");
return 0;
}