题目链接

戳我

\(Describe\)

给出一棵树,每个节点有一个颜色,求每个节点的子树中颜色数目最多的颜色的和。

\(Solution\)

这道题为什么好多人都写的是启发式合并,表示我不会啊.

这道题不是可以用线段树合并吗?将每个子节点看做一个线段树,维护两个值一个颜色的数目最大值,一个是最大颜色的和,然后不断从儿子向父亲合并即可.

\(Code\)

#include<bits/stdc++.h>
#define int long long
#define rg register
using namespace std;
int read(){
int x=0,f=1;char c=getchar();
while(c<'0'||c>'9') f= (c=='-')?-1:1,c=getchar();
while(c>='0'&&c<='9') x=x*10+c-48,c=getchar();
return f*x;
}
struct node {
int to,next;
}a[2000011];
struct node1{
int ch[2],sum,rt,maxx;
}t[2000011];
int head[200011],cnt,x,y,n,c[200011];
void add(int x,int y){
a[++cnt].to=y;
a[cnt].next=head[x];
head[x]=cnt;
}
int b[200011],tot;
void add(int &rt,int l,int r,int c){
rt=++tot;
t[rt].maxx=1,t[rt].sum=c;
if(l==r)
return ;
int mid=(l+r)>>1;
if(c<=mid)
add(t[rt].ch[0],l,mid,c);
else add(t[rt].ch[1],mid+1,r,c);
}
void pushup(int x){
int fx=t[x].ch[0],fy=t[x].ch[1];
if(t[fx].maxx==t[fy].maxx)
t[x].sum=t[fx].sum+t[fy].sum,t[x].maxx=t[fx].maxx;
else if(t[fx].maxx>t[fy].maxx)
t[x].sum=t[fx].sum,t[x].maxx=t[fx].maxx;
else t[x].sum=t[fy].sum,t[x].maxx=t[fy].maxx;
}
int join(int x,int y,int l,int r){
if(!x||!y)
return x+y;
int mid=(l+r)>>1;
if(l==r){
t[x].maxx+=t[y].maxx;
return x;
}
t[x].ch[0]=join(t[x].ch[0],t[y].ch[0],l,mid);
t[x].ch[1]=join(t[x].ch[1],t[y].ch[1],mid+1,r);
pushup(x);
return x;
}
void dfs(int x,int fa){
add(t[x].rt,1,n,b[x]);
for(int i=head[x];i;i=a[i].next){
int v=a[i].to;
if(v==fa)
continue;
dfs(v,x);
t[x].rt=join(t[x].rt,t[v].rt,1,n);
}
c[x]=t[t[x].rt].sum;
}
main(){
n=read();
for(int i=1;i<=n;i++)
b[i]=read();
for(int i=1;i<n;i++)
x=read(),y=read(),add(x,y),add(y,x);
dfs(1,0);
for(int i=1;i<=n;i++)
printf("%I64d ",c[i]);
}

「CF 600E」 Lomsat gelral的更多相关文章

  1. codeforces 600E E. Lomsat gelral (线段树合并)

    codeforces 600E E. Lomsat gelral 传送门:https://codeforces.com/contest/600/problem/E 题意: 给你一颗n个节点的树,树上的 ...

  2. CF 600 E. Lomsat gelral

    E. Lomsat gelral http://codeforces.com/contest/600/problem/E 题意: 求每个子树内出现次数最多的颜色(如果最多的颜色出现次数相同,将颜色编号 ...

  3. CF EDU - E. Lomsat gelral 树上启发式合并

    学习:http://codeforces.com/blog/entry/44351 E. Lomsat gelral 题意: 给定一个以1为根节点的树,每个节点都有一个颜色,问每个节点的子树中,颜色最 ...

  4. DSU On Tree——Codeforces 600E(E. Lomsat gelral)

    有这么一类问题,要求统计一棵树上与子树相关的某些信息,比如:在一棵所有节点被染色的树上,统计每棵子树上出现次数最多的颜色编号之和. 很自然的可以想到用DFS序+主席树去求解,但是编码复杂度很高: 然后 ...

  5. 「CF600E」Lomsat gelral

    传送门 Luogu 解题思路 线段树合并板子题(也可以 dsu on the tree) 好像没什么好讲的,就是要注意开 long long . 细节注意事项 咕咕咕 参考代码 #include &l ...

  6. Solution -「CF 1342E」Placing Rooks

    \(\mathcal{Description}\)   Link.   在一个 \(n\times n\) 的国际象棋棋盘上摆 \(n\) 个车,求满足: 所有格子都可以被攻击到. 恰好存在 \(k\ ...

  7. CF 600 E Lomsat gelral —— 树上启发式合并

    题目:http://codeforces.com/contest/600/problem/E 看博客:https://blog.csdn.net/blue_kid/article/details/82 ...

  8. 「CF 961G」Partitions

    题目链接 戳我 \(Solution\) 首先,这个直接推式子.自己推去 所以我们来想一想一些巧妙的方法 \(|S|\sum w_i\) 可以转化为:划分好集合后,每个点都对当前点有\(w_i\)的贡 ...

  9. Solution -「CF 1622F」Quadratic Set

    \(\mathscr{Description}\)   Link.   求 \(S\subseteq\{1,2,\dots,n\}\),使得 \(\prod_{i\in S}i\) 是完全平方数,并最 ...

随机推荐

  1. mysql 无意重启 [Note] /usr/sbin/mysqld: Normal shutdown

    情况: 今早发现,昨天下午安装的4台mysql服务器,突然出现,由于在shell窗口 (root@localhost:mysql.sock) [(none)]> 190102 18:12:16 ...

  2. 整合多个py文件接口的unittest。suite执行方法

    1.每个接口用例为一个.py文件.内容如下: getAdMakeMoneyList文件: # coding=utf-8import xlrdimport requestsimport unittest ...

  3. temp5

  4. ubuntu16.04 双网卡绑定

    ubuntu 16.04 双网卡绑定仅仅需要配置/etc/network/interfaces 添加标记内容即可 apt-get install ifenslave 默认已经安装

  5. Python 中的进程与 锁

    理论知识 操作系统背景知识 顾名思义,进程即正在执行的一个过程.进程是对正在运行程序的一个抽象. 进程的概念起源于操作系统,是操作系统最核心的概念,也是操作系统提供的最古老也是最重要的抽象概念之一.操 ...

  6. leetcode421

    public class Solution { public int FindMaximumXOR(int[] nums) { , mask = ; ; i >= ; i--) { mask = ...

  7. 「小程序JAVA实战」微信小程序工程结构了解(五)

    转自:https://idig8.com/2018/08/09/xiaochengxu-chuji-05/ 微信小程序工程结构 audio,button,canvas,checkbox 都是由4个文件 ...

  8. mysql 批量插入与单条插入 的效率比较

    1.数据插入性能(单个插入和批量插入) public class Test { private Long id; private String test; public Long getId() { ...

  9. 粗粒度(Coarse-grained)vs细粒度(fine-grained)

    在读的一篇文献中关于RDF的描述: As we know, RDF data is a set of triples with the form (subject, property, object) ...

  10. 【总结整理】如何判断伪需求(摘自pmcafe)

    1.客户不会直接提需求,都是给解决方案,所以得到用户的反馈之后,先反推一下是很必要的,为什么客户会有这样的方案 总结:方案不合适 例如:客户只会说我要快马,反推一下,其实客户是想要更快,这样的话,解决 ...