#include<bits/stdc++.h>
using namespace std;
int n;
int col[100005];
int h[100005];
int e[200005];
int idx;
int ne[200005];
int sz[100005];
int son[100005];
long long ans[100005];
long long cnt[100005];
long long sum;
long long mx;
void add(int a,int b){
e[idx]=b;
ne[idx]=h[a];
h[a]=idx++;
}
void dfs_son(int x,int father){
int i,j,k;
sz[x]=1;
for(i=h[x];i!=-1;i=ne[i]){
j=e[i];
if(j==father) continue ;
dfs_son(j,x);
sz[x]+=sz[j];
if(sz[j]>sz[son[x]]){
son[x]=j;
}
}
}
void update(int x,int son,int sign,int father ){
int i,j,k;
int co=col[x];
cnt[co]+=sign;
if(cnt[co]>mx){
mx=cnt[co];
sum=co;
}
else if(cnt[co]==mx){
sum+=co;
}
//else if(cnt[co]>)
for(i=h[x];i!=-1;i=ne[i]){
j=e[i];
if(j==son||j==father) continue;
update(j,son,sign,x);
}
}
void dfs(int x,int father,int op){
int i,j,k;
for(i=h[x];i!=-1;i=ne[i]){
j=e[i];
if(j==father||j==son[x]) continue ;
dfs(j,x,0);
}
if(son[x])
dfs(son[x],x,1);
update(x,son[x],1,father);
ans[x]=sum;
if(op==0) update(x,0,-1,father),sum=0,mx=0;
}
int main(){
int i,j,k;
cin>>n;
memset(h,-1,sizeof h);
for(i=1;i<=n;i++){
cin>>col[i];
}
for(i=0;i<n-1;i++){
int a,b;
cin>>a>>b;
add(a,b);
add(b,a);
}
dfs_son(1,-1);
dfs(1,-1,1);
for(i=1;i<=n;i++) cout<<ans[i]<<" ";
return 0;
}
麻衣学姐是我的
哈哈哈 我是唯一正牌男友