#include<bits/stdc++.h>
using namespace std;
const int N=300030;
int head[N],net[N<<1],to[N<<1],tot;
int f[N][21];
int aa[N];
int dh[N];
int bb[N];
int n;
inline void add(int u,int v)
{
to[++tot]=v;
net[tot]=head[u];
head[u]=tot;
}
void go(int u,int fa)
{
// printf("%d %d\n",u,fa);
f[u][0]=fa;
dh[u]=dh[fa]+1;
for(int i=head[u];i;i=net[i])
{
int v=to[i];
// printf("%d %d\n",u,to[i]);
if(v==fa)continue;
go(v,u);
}
}
int lca(int u,int v)
{
if(dh[u]<dh[v])swap(u,v);
for(int i=20;i>=0;i--)
if(dh[f[u][i]]>=dh[v])u=f[u][i];
if(u==v)return u;
// printf("%d %d\n",u,v);
for(int i=20;i>=0;i--)
if(f[u][i]!=f[v][i])u=f[u][i],v=f[v][i];
return f[u][0];
}
void dfs(int u,int fa)
{
for(int i=head[u];i;i=net[i])
{
int v=to[i];
if(v==fa)continue;
dfs(v,u);
bb[u]+=bb[v];
// if(bb[v]<0)
// printf("%d %d %d %dsdfsdfsdfsdf\n",bb[v],u,v,bb[u]);
}
}
int main()
{
// freopen("a.txt","r",stdin);
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%d",&aa[i]);
for(int i=1;i<n;i++)
{
int u,v;
scanf("%d%d",&u,&v);
add(u,v);
add(v,u);
}
go(1,0);
for(int i=1;i<=n;i++)
for(int j=1;j<=20;j++)
f[i][j]=f[f[i][j-1]][j-1];
// int q;
// cin>>q;
// while(q--)
// {
// int u,v;
// cin>>u>>v;
// cout<<lca(u,v)<<endl;
// }
for(int i=1;i<=n-1;i++)
{
bb[aa[i]]++;
bb[aa[i+1]]++;
int t=lca(aa[i],aa[i+1]);
// printf("%d %d %d\n",t,aa[i],aa[i+1]);
bb[t]--;
bb[f[t][0]]--;
}
dfs(1,0);
for(int i=2;i<=n;i++)bb[aa[i]]--;
for(int i=1;i<=n;i++)
{
printf("%d\n",bb[i]);
}
return 0;
}