#include <bits/stdc++.h>
#define N int(2e5)
using namespace std;
int n,c[N+2],kq[N+2];
vector<int>adj[N+2];
set<int>luu[N+2];
void dfs(int u,int parent)
{
luu[u].insert(c[u]);
for(int i=0;i<adj[u].size();i++)
{
int v=adj[u][i];
if(v==parent)
continue;
dfs(v,u);
if(luu[u].size()<luu[v].size())
swap(luu[u],luu[v]);
for(int val:luu[v])
luu[u].insert(val);
luu[v].clear();
}
kq[u]=luu[u].size();
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
cin>>c[i];
for(int i=1;i<n;i++)
{
int a,b;
cin>>a>>b;
adj[a].push_back(b);
adj[b].push_back(a);
}
dfs(1,0);
for(int i=1;i<=n;i++)
cout<<kq[i]<<" ";
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CgojZGVmaW5lIE4gaW50KDJlNSkKCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgbixjW04rMl0sa3FbTisyXTsKCnZlY3RvcjxpbnQ+YWRqW04rMl07CgpzZXQ8aW50Pmx1dVtOKzJdOwoKdm9pZCBkZnMoaW50IHUsaW50IHBhcmVudCkKCnsKCiAgICBsdXVbdV0uaW5zZXJ0KGNbdV0pOwogICAgCiAgICBmb3IoaW50IGk9MDtpPGFkalt1XS5zaXplKCk7aSsrKQogICAgCiAgICB7CgogICAgICAgIGludCB2PWFkalt1XVtpXTsKICAgICAgICBpZih2PT1wYXJlbnQpCiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIGRmcyh2LHUpOwogICAgICAgIGlmKGx1dVt1XS5zaXplKCk8bHV1W3ZdLnNpemUoKSkKICAgICAgICAgICAgc3dhcChsdXVbdV0sbHV1W3ZdKTsKICAgICAgICBmb3IoaW50IHZhbDpsdXVbdl0pCiAgICAgICAgICAgIGx1dVt1XS5pbnNlcnQodmFsKTsKICAgICAgICBsdXVbdl0uY2xlYXIoKTsKICAgIH0KICAgIGtxW3VdPWx1dVt1XS5zaXplKCk7Cn0KaW50IG1haW4oKQp7CiAgICBjaW4+Pm47CiAgICBmb3IoaW50IGk9MTtpPD1uO2krKykKICAgICAgICBjaW4+PmNbaV07CiAgICBmb3IoaW50IGk9MTtpPG47aSsrKQogICAgewogICAgICAgIGludCBhLGI7CiAgICAgICAgY2luPj5hPj5iOwogICAgICAgIGFkalthXS5wdXNoX2JhY2soYik7CiAgICAgICAgYWRqW2JdLnB1c2hfYmFjayhhKTsKICAgIH0KICAgIGRmcygxLDApOwogICAgZm9yKGludCBpPTE7aTw9bjtpKyspCiAgICAgICAgY291dDw8a3FbaV08PCIgIjsKICAgIHJldHVybiAwOwp9