#include <bits/stdc++.h>
using namespace std;
ifstream fin ("cerere.in");
ofstream fout ("cerere.out");
vector<vector<int>> c(100001);
vector <int> t(100001),v(100001);
int rez[100001],g[100001],s[100001];
int nr,a,b,n,cnt=1,cnt2;
void dfs(int nod)
{
cnt2++;
s[nod]=1;
v[cnt2]=nod;
if(g[nod]!=0&&g[nod]<=cnt2)rez[nod]=rez[v[cnt2-g[nod]]]+1;
for(int i=0;i<c[nod].size();i++)
{
if(s[c[nod][i]]==0)dfs(c[nod][i]);
}
cnt2--;
}
int main()
{
fin>>n;
for(int i=1;i<=n;i++)fin>>g[i];
for(int i=1;i<=n;i++)
{
fin>>a>>b;
c[a].push_back(b);
t[b]=1;
}
while(t[cnt]==1)cnt++;
dfs(cnt);
for(int i=1;i<=n;i++)
{
fout<<rez[i]<<" ";
}
return 0;
}