}
int main()
{
n=read();
for(re int i=1;i<=n;++i) a[i]=read();
for(re int i=1;i<n;++i)
{
x=read(),y=read();
add(x,y);
add(y,x);
}
pre();
dfs(1,0);
for(re int i=1;i<n;++i)
{
tmp=lca(a[i],a[i+1]);
if(i!=n-1) vis[a[i+1]]=1;
cf[a[i]]++;
cf[a[i+1]]++;
cf[tmp]--;
cf[fat[tmp]]--;
}
dfs2(1,0);
ans[a[n]]--;//最后经过的点不需要计算
for(re int i=1;i<=n;++i) printf("%d
",ans[i]);
return 0;
}
</font>