题意翻译

一棵树有n个结点,每个结点都是一种颜色,每个颜色有一个编号,求树中每个子树的最多的颜色编号的和。

线段树合并板子题,没啥难度,注意开long long

不过这题$dsu$ $on$ $tree$确实更快

代码:

  1. #include<iostream>
  2. #include<cstdio>
  3. #define ls ch[node][0]
  4. #define rs ch[node][1]
  5. #define M 100010
  6. using namespace std;
  7. int n,m,num,cnt;
  8. int head[M],rt[M],co[M];
  9. int ch[M<<][],v1[M<<];
  10. long long v2[M<<],ans[M];
  11. struct point{int to,next;}e[M<<];
  12. void add(int from,int to) {
  13. e[++num].next=head[from];
  14. e[num].to=to;
  15. head[from]=num;
  16. }
  17. void update(int node) {
  18. if(v1[ls]==v1[rs]) {
  19. v1[node]=v1[ls];v2[node]=v2[ls]+v2[rs];
  20. }
  21. else{
  22. if(v1[ls]>v1[rs]) v1[node]=v1[ls],v2[node]=v2[ls];
  23. else v1[node]=v1[rs],v2[node]=v2[rs];
  24. }
  25. }
  26. void insert(int &node,int l,int r,int x) {
  27. if(!node) node=++cnt;
  28. if(l==r) {
  29. v1[node]=,v2[node]=x;return;
  30. }int mid=(l+r)/;
  31. if(x<=mid) insert(ls,l,mid,x);
  32. else insert(rs,mid+,r,x);
  33. update(node);
  34. }
  35. int merge(int x,int y,int l,int r) {
  36. if(!x||!y) return x+y;
  37. int node=++cnt;
  38. if(l==r) {
  39. v1[node]=v1[x]+v1[y];v2[node]=l;return node;
  40. }
  41. int mid=(l+r)/;
  42. ch[node][]=merge(ch[x][],ch[y][],l,mid);
  43. ch[node][]=merge(ch[x][],ch[y][],mid+,r);
  44. update(node);return node;
  45. }
  46. void dfs(int x,int fa) {
  47. insert(rt[x],,n,co[x]);
  48. for(int i=head[x];i;i=e[i].next) {
  49. int to=e[i].to;
  50. if(to==fa) continue;
  51. dfs(to,x);
  52. rt[x]=merge(rt[x],rt[to],,n);
  53. }
  54. ans[x]=v2[rt[x]];
  55. }
  56. int main() {
  57. scanf("%d",&n);
  58. for(int i=;i<=n;i++) scanf("%d",&co[i]);
  59. for(int i=;i<n;i++) {
  60. int x,y;scanf("%d%d",&x,&y);
  61. add(x,y),add(y,x);
  62. }
  63. dfs(,);
  64. for(int i=;i<=n;i++) printf("%lld ",ans[i]);
  65. return ;
  66. }

[CF600E]Lomsat gelral的更多相关文章

  1. CF600E Lomsat gelral 和 CF741D Dokhtar-kosh paths

    Lomsat gelral 一棵以\(1\)为根的树有\(n\)个结点,每个结点都有一种颜色,每个颜色有一个编号,求树中每个子树的最多的颜色编号(若有数量一样的,则求编号和). \(n \le 10^ ...

  2. CF600E Lomsat gelral 【线段树合并】

    题目链接 CF600E 题解 容易想到就是线段树合并,维护每个权值区间出现的最大值以及最大值位置之和即可 对于每个节点合并一下两个子节点的信息 要注意叶子节点信息的合并和非叶节点信息的合并是不一样的 ...

  3. CF600E Lomsat gelral(dsu on tree)

    dsu on tree跟冰茶祭有什么关系啊喂 dsu on tree的模板题 思想与解题过程 类似树链剖分的思路 先统计轻儿子的贡献,再统计重儿子的贡献,得出当前节点的答案后再减去轻儿子对答案的贡献 ...

  4. CF600E:Lomsat gelral(线段树合并)

    Description 一棵树有n个结点,每个结点都是一种颜色,每个颜色有一个编号,求树中每个子树的最多的颜色编号的和. Input 第一行一个$n$.第二行$n$个数字是$c[i]$.后面$n-1$ ...

  5. dsu on tree(CF600E Lomsat gelral)

    题意 一棵树有n个结点,每个结点都是一种颜色,每个颜色有一个编号,求树中每个子树的最多的颜色编号的和. dsu on tree 用来解决子树问题 好像不能带修改?? 暴力做这个题,就是每次扫一遍子树统 ...

  6. cf600E. Lomsat gelral(dsu on tree)

    题意 题目链接 给出一个树,求出每个节点的子树中出现次数最多的颜色的编号和 Sol dsu on tree的裸题. 一会儿好好总结总结qwq #include<bits/stdc++.h> ...

  7. CF600E Lomsat gelral——线段树合并/dsu on tree

    题目描述 一棵树有$n$个结点,每个结点都是一种颜色,每个颜色有一个编号,求树中每个子树的最多的颜色编号的和. 这个题意是真的窒息...具体意思是说,每个节点有一个颜色,你要找的是每个子树中颜色的众数 ...

  8. CF600E Lomsat gelral (启发式合并)

    You are given a rooted tree with root in vertex 1. Each vertex is coloured in some colour. Let's cal ...

  9. CF600E Lomsat gelral 树上启发式合并

    题目描述 有一棵 \(n\) 个结点的以 \(1\) 号结点为根的有根树. 每个结点都有一个颜色,颜色是以编号表示的, \(i\) 号结点的颜色编号为 \(c_i\)​. 如果一种颜色在以 \(x\) ...

随机推荐

  1. php中关于时间的用法

    一.时间戳相关:        当前时间戳:time();         把时间戳转换为时间显示:date("Y-m-d H:i:s", $a);         把日期时间转换 ...

  2. mysql优化之explain备忘笔记

    今天使用explain来查看sql执行情况的时候发现有的东西忘掉了,故作此篇文章来强化此知识点的记忆. 1.explain作用 exlain 执行结果显示了mysql 存储引擎如何使用索引来处理sel ...

  3. 【BZOJ2004】[Hnoi2010]Bus 公交线路 状压+矩阵乘法

    [BZOJ2004][Hnoi2010]Bus 公交线路 Description 小Z所在的城市有N个公交车站,排列在一条长(N-1)km的直线上,从左到右依次编号为1到N,相邻公交车站间的距离均为1 ...

  4. 【BZOJ1453】[Wc]Dface双面棋盘 线段树+并查集

    [BZOJ1453][Wc]Dface双面棋盘 Description Input Output Sample Input Sample Output HINT 题解:话说看到题的第一反应其实是LCT ...

  5. Swift - 把汉字转换为拼音,并且截取首字母做索引用

    var transformContents = CFStringCreateMutableCopy(nil, 0, "咋啊的看到回复阿斯顿发货发哦iasdifas") CFStri ...

  6. MySQL 5.6 my.cnf 参数说明(转)

    # 以下选项会被MySQL客户端应用读取. # 注意只有MySQL附带的客户端应用程序保证可以读取这段内容. # 如果你想你自己的MySQL应用程序获取这些值. # 需要在MySQL客户端库初始化的时 ...

  7. Eclipse git pull 报Nothing to fetch 异常原因

    eclipse git pull 报错 // 使用这个配置就可以正常pull了        [core]        symlinks = false         repositoryform ...

  8. python中的接口和依赖注入

    首先,我们必须明确的一点是:python里无接口类型,定义接口只是一个人为规定,在编程过程自我约束 python的类是可以写任意个方法的 定义一个接口对继承类进行约束,接口里有什么方法,继承类就必须有 ...

  9. Python开发【项目】:生产环境下实时统计网站访问日志信息

    日志实时分析系统 生产环境下有需求:要每搁五分钟统计下这段时间内的网站访问量.UV.独立IP等信息,用直观的数据表格表现出来 环境描述: 网站为Nginx服务,系统每日凌晨会对日志进行分割,拷贝到其他 ...

  10. python 面向对象 私有属性

    __init__构造函数 self.name = name # 属性, 实例变量,成员变量,字段 def sayhi()# 方法, 动态属性 私有属性不对外看到 前面加上__ class role() ...