#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;
const int maxn=1e6+10;
int n,c[maxn],st[maxn],to[maxn],nt[maxn],topt,si[maxn],num[maxn];
long long ans[maxn];
inline void add(int x,int y){to[++topt]=y; nt[topt]=st[x]; st[x]=topt;}
inline long long f(int x){return 1ll*x*(x+1)/2;}
void dfs(int x,int fa)
{
	si[x]=1; int k=num[c[x]],p=st[x];
	while (p)
	{
		if (to[p]!=fa) 
		{
			int now=num[c[x]]; dfs(to[p],x); 
			si[x]+=si[to[p]]; now=si[to[p]]-(num[c[x]]-now); ans[c[x]]-=f(now);
		}
		p=nt[p];
	}
	num[c[x]]=k+si[x];
}
int main()
{
	scanf("%d",&n);
	for (int i=1;i<=n;i++) scanf("%d",&c[i]),ans[i]=f(n);
	for (int i=1;i<n;i++) {int x,y; scanf("%d%d",&x,&y); add(x,y); add(y,x);}
	dfs(1,0);
	for (int i=1;i<=n;i++) ans[i]-=f(n-num[i]),printf("%lld\n",ans[i]);
return 0;
}