#include<bits/stdc++.h>
using namespace std;

const int N=500005,INF=0x3f3f3f3f;
int n,a[N],sz[N],lst[N];
int v[N],nxt[N],head[N];
long long dp[N],ans[N];
bool vis[N];

void dfs1(int x,int fa)
{
	sz[x]=1;
	for(int i=head[x];i>0;i=nxt[i])
	{
		if(v[i]==fa) continue;
		dfs1(v[i],x),sz[x]+=sz[v[i]];
	}
	dp[x]=sz[x];
}

void dfs2(int x,int fa)
{
	int ls=lst[a[x]];
	dp[lst[a[x]]]-=sz[x];
	for(int i=head[x];i>0;i=nxt[i])
	{
		if(v[i]==fa) continue;
		lst[a[x]]=v[i],dfs2(v[i],x);
	}
//	cout<<x<<' '<<fa<<' '<<sz[x]<<' '<<lst[a[x]]<<' '<<dp[x]<<endl;
	lst[a[x]]=ls,ans[a[fa]]+=dp[x]*(dp[x]+1)/2;
}

int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++) scanf("%d",&a[i]);
	for(int i=1;i<n;i++)
	{
		scanf("%d%d",&v[i],&v[i+n]);
		nxt[i]=head[v[i+n]],head[v[i+n]]=i;
		nxt[i+n]=head[v[i]],head[v[i]]=i+n;
	}
	for(int i=1;i<=n;i++) lst[i]=i+n,dp[i+n]=n;
	dfs1(1,0),dfs2(1,0);
	for(int i=1;i<=n;i++) ans[i]+=dp[i+n]*(dp[i+n]+1)/2;
//	for(int i=1;i<=n+n;i++) cout<<i<<' '<<dp[i]<<endl;
	for(int i=1;i<=n;i++) printf("%lld\n",1ll*n*(n+1)/2-ans[i]);
}