题目链接

给一颗树, 每个节点有初始的颜色值。 1为根节点。定义一个节点的值为, 它的子树中出现最多的颜色的值, 如果有多种颜色出现的次数相同, 那么值为所有颜色的值的和。

每一个叶子节点是一个map, 然后从叶子节点并上去, 注意并的时候把小的map并到大的map里面。

 #include<bits/stdc++.h>
using namespace std;
#define pb(x) push_back(x)
#define ll long long
#define mk(x, y) make_pair(x, y)
#define lson l, m, rt<<1
#define mem(a) memset(a, 0, sizeof(a))
#define rson m+1, r, rt<<1|1
#define mem1(a) memset(a, -1, sizeof(a))
#define mem2(a) memset(a, 0x3f, sizeof(a))
#define rep(i, a, n) for(int i = a; i<n; i++)
#define ull unsigned long long
typedef pair<int, int> pll;
const double PI = acos(-1.0);
const double eps = 1e-;
const int mod = 1e9+;
const int inf = ;
const int dir[][] = { {-, }, {, }, {, -}, {, } };
const int maxn = 1e5+;
int head[maxn*], color[maxn], num, cnt[maxn], id[maxn];
ll anss[maxn], ans[maxn];
struct node
{
int to, nextt;
}e[maxn*];
void add(int u, int v) {
e[num].to = v, e[num].nextt = head[u], head[u] = num++;
}
map <int, int> m[maxn];
void combine(int &u, int &v) {
if(m[u].size()<m[v].size())
swap(u, v);
for(auto it = m[v].begin(); it!=m[v].end(); it++) {
m[u][it->first] += it->second;
if(m[u][it->first]>cnt[u]) {
cnt[u] = m[u][it->first];
ans[u] = it->first;
} else if(m[u][it->first] == cnt[u]) {
ans[u] += it->first;
}
}
}
void dfs(int u, int fa) {
for(int i = head[u]; ~i; i = e[i].nextt) {
int v = e[i].to;
if(v == fa)
continue;
dfs(v, u);
combine(id[u], id[v]);
}
anss[u] = ans[id[u]];
}
int main()
{
mem1(head);
int n, x, y;
cin>>n;
for(int i = ; i<=n; i++) {
scanf("%d", &x);
id[i] = i;
m[i][x] = ;
cnt[i] = ;
ans[i] = x;
}
for(int i = ; i<n-; i++) {
scanf("%d%d", &x, &y);
add(x, y);
add(y, x);
}
dfs(, );
for(int i = ; i<=n; i++) {
printf("%I64d ", anss[i]);
}
return ;
}

最新文章

  1. Flume1 初识Flume和虚拟机搭建Flume环境
  2. UE4 VR GUI实现 参考(UMG AND VR)
  3. Python自动化 【第九篇】:Python基础-线程、进程及python GIL全局解释器锁
  4. css小tip
  5. STM32F4_TIM基本延时(计数原理)
  6. 4.1. 如何在Windows环境下开发Python
  7. Java操作PDF之itext入门
  8. DOM操作和样式操作库的封装
  9. ASP.NET Core 菜鸟之路:从Startup.cs说起
  10. 分享几个python小脚本
  11. IO模型的介绍
  12. ul无点标签左移
  13. mysql中的事物处理
  14. python之抽象基类
  15. android SDK打包app
  16. django面试八
  17. 001-pro ant design 升级2.0后变更
  18. Servlet基本操作
  19. 转 js事件探秘
  20. DAY2-Python学习笔记

热门文章

  1. SVN导出增量包的方法
  2. 通过自定义注解反射生成SQL语句
  3. http keepalive and tcpkeepalive
  4. JavaWeb核心编程之(三.5)HTTP请求和接受表单数据
  5. Spring中ref local与ref bean区别
  6. xsqlbuilder使用说明
  7. Android模拟器使用笔记,学习head_first python 安卓开发章节
  8. 源码学习之ASP.NET MVC Application Using Entity Framework
  9. Java+Python+Jython环境变量配置
  10. Linux 安装xtrabackup的依赖问题