Pagini recente » Cod sursa (job #2302102) | Cod sursa (job #1655722) | Cod sursa (job #617623) | Cod sursa (job #444762) | Cod sursa (job #1677511)
#include <bits/stdc++.h>
#define maxN 100005
using namespace std;
vector<int> v[maxN];
int n, i, j, x, y, s[maxN], tata[maxN], dist[maxN], k[maxN];
bool viz[maxN];
void dfs(int nod, int lev)
{
s[lev]=nod;
if(!k[nod]) dist[nod]=0;
else dist[nod]=1+dist[s[lev-k[nod]]];
for(vector<int>::iterator it=v[nod].begin(); it!=v[nod].end(); it++)
dfs(*it, lev+1);
}
int main()
{
freopen("cerere.in", "r", stdin);
freopen("cerere.out", "w", stdout);
scanf("%d", &n);
for(i = 1; i <= n; i++)
scanf("%d", &k[i]);
for(i = 1; i < n; i++)
{
scanf("%d %d", &x, &y);
v[x].push_back(y);
tata[y]=x;
}
for(i = 1; i <= n; i++)
{
if(!tata[i])
{
dfs(i, 1);
break;
}
}
for(i = 1; i <= n; i++)
printf("%d ", dist[i]);
return 0;
}