#include <bits/stdc++.h>
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
int s[100001];
int x[100001];
int k[100001];
int sol[100001];
vector<int> v[100001];
void dfs(int nod,int depth)
{
s[depth] = nod;
if(k[nod]!=0)
sol[nod] = sol[s[depth-k[nod]]] + 1;
for(auto it:v[nod])
dfs(it , depth+1);
}
int main()
{
int n,i,a,b;
fin>>n;
for(i=1;i<=n;i++)
fin>>k[i];
for(i=1;i<=n;i++)
{
fin>>a>>b;
v[a].push_back(b);
x[b]=a;
}
i=1;
while(x[i])
i++;
dfs(i,0);
for(i=1;i<=n;i++)
fout<<sol[i]<<' ';
return 0;
}