#include<iostream>
#include<vector>
using namespace std;
int N;
int c[2<<17];
vector<int>G[2<<17];
int cnt[2<<17];
long ans[2<<17];
int dfs(int u,int p)
{
	int ret=1;
	int sto=cnt[c[u]];
	int pre=sto;
	for(int v:G[u])if(v!=p)
	{
		int t=dfs(v,u);
		ret+=t;
		long k=t-(cnt[c[u]]-sto);
		ans[c[u]]-=k*(k+1)/2;
		sto=cnt[c[u]];
	}
	cnt[c[u]]=pre+ret;
	return ret;
}
int main()
{
	cin>>N;
	for(int i=0;i<N;i++)
	{
		cin>>c[i];
		c[i]--;
	}
	for(int i=1;i<N;i++)
	{
		int u,v;cin>>u>>v;u--,v--;
		G[u].push_back(v);
		G[v].push_back(u);
	}
	dfs(0,-1);
	for(int i=0;i<N;i++)
	{
		ans[i]+=(long)N*(N+1)/2;
		long k=N-cnt[i];
		ans[i]-=k*(k+1)/2;
		cout<<ans[i]<<endl;
	}
}