Link to this code: https://cses.fi/paste/51e150981fc51b0cab5c55/
#include <bits/stdc++.h>
#define ll long long
#define F first
#define S second
using namespace std;
ll tt=1,n,m,a,b,c,w,ans2=1,ans1=0,h,sum=0,d,maxi=0,mini=0,mod2=998244353,mod=7+1e9,k;
const ll INF=1000000005,N=5+2e5,LOG=23;
bool f=0;
vector<ll> v,v2;
string s,t;

set<int> st[N];
vector<int> g[N];
int ans[N],arr[N];

void dfs(int v,int p=0)
{
  for(auto x : g[v])
  {
    if(x==p){continue;}
    dfs(x,v);
    if(st[x].size()>st[v].size()){swap(st[v],st[x]);}
    for(auto val : st[x])
    {
      st[v].insert(val);
    }
    st[x].clear();
  }
  st[v].insert(arr[v]);
  ans[v] = st[v].size();
}

void solve()
{
  cin >> n;
  for(int i=1;i<=n;++i)
  {
    cin >> arr[i];
  }
  for(int i=0;i<n-1;++i)
  {
    cin >> a >> b;
    g[a].push_back(b);
    g[b].push_back(a);
  }

  dfs(1);

  for(int i=1;i<=n;++i){cout << ans[i] << " ";}
}

int main(){
  ios_base::sync_with_stdio(NULL);cin.tie(0);cout.tie(0);
  ///cin >> tt;
  while(tt--)
  {
    solve();
  }
  return 0;
}