/******************************************************************************
Online C++ Compiler.
Code, Compile, Run and Debug C++ program online.
Write your code in this editor and press "Run" button to compile and execute it.
*******************************************************************************/
#include <bits/stdc++.h>
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
vector<vector<int>> v(100001);
vector<int> stk;
int k[100001],ans[100001],tata[100001];
void dfs(int nod)
{
stk.push_back(nod);
if(k[nod]==0) ans[nod]=0;
else
{
int stramos=stk[stk.size()-1-k[nod]];
ans[nod]=1+ans[stramos];
}
for(int i=0;i<v[nod].size();i++)
{
dfs(v[nod][i]);
}
stk.pop_back();
}
int main()
{
int n,i,x,y,rad;
fin>>n;
for(i=1;i<=n;i++)
{
fin>>k[i];
}
for(i=1;i<n;i++)
{
fin>>x>>y;
v[x].push_back(y);
tata[y]=x;
}
for(i=1;i<=n;i++)
{
if(tata[i]==0)
{
rad=i;
break;
}
}
dfs(rad);
for(i=1;i<=n;i++)
{
fout<<ans[i]<<" ";
}
return 0;
}