Pagini recente » Cod sursa (job #200390) | Cod sursa (job #1286520) | Cod sursa (job #2170045) | Cod sursa (job #304001) | Cod sursa (job #3003640)
#include <bits/stdc++.h>
using namespace std;
ifstream in("cerere.in");
ofstream out("cerere.out");
const int N = 1e5 + 5;
vector <int> g[N];
int n;
int k[N];
int s[N], sol[N];
void dfs(int nod, int lev)
{
s[lev] = nod;
if(k[nod] == 0)
sol[nod] = 0;
else
sol[nod] = 1 + sol[ s[lev - k[nod]] ];
for(int i = 0; i < g[nod].size(); i++)
dfs(g[nod][i], lev + 1);
}
int t[N];
int main()
{
in >> n;
for(int i = 1; i <= n; i++)
in >> k[i];
for(int i = 1; i < n; i++)
{
int x, y;
in >> x >> y;
g[x].push_back(y);
t[y] = x;
}
int root = 0;
for(int i = 1; i <= n; i++)
{
if(t[i] == 0)
{
root = i;
break;
}
}
dfs(root, 1);
for(int i = 1; i <= n; i++)
out << sol[i] << ' ';
return 0;
}