CF600E:Lomsat gelral(线段树合并)
Description
Input
Output
Sample Input1
1 2 3 4
1 2
2 3
2 4
Sample Output1
Sample Input2
1 2 3 1 2 3 3 1 1 3 2 2 1 2 3
1 2
1 3
1 4
1 14
1 15
2 5
2 6
2 7
3 8
3 9
3 10
4 11
4 12
4 13
Sample Output2
6 5 4 3 2 3 3 1 1 3 2 2 1 2 3
Solution
Code
#include<iostream>
#include<cstring>
#include<cstdio>
#define N (100009)
#define LL long long
using namespace std; struct Sgt{int ls,rs,max; LL val;}Segt[N*];
struct Edge{int to,next;}edge[N<<];
int n,x,u,v,sgt_num,c[N],Root[N];
int head[N],num_edge; void add(int u,int v)
{
edge[++num_edge].to=v;
edge[num_edge].next=head[u];
head[u]=num_edge;
} void Pushup(int now)
{
int ls=Segt[now].ls, rs=Segt[now].rs;
if (Segt[ls].max==Segt[rs].max)
{
Segt[now].max=Segt[ls].max;
Segt[now].val=Segt[ls].val+Segt[rs].val;
}
else if (Segt[ls].max>Segt[rs].max)
{
Segt[now].max=Segt[ls].max;
Segt[now].val=Segt[ls].val;
}
else
{
Segt[now].max=Segt[rs].max;
Segt[now].val=Segt[rs].val;
}
} void Update(int &now,int l,int r,int v)
{
if (!now) now=++sgt_num;
if (l==r)
{
Segt[now].max=;
Segt[now].val=v;
return;
}
int mid=(l+r)>>;
if (v<=mid) Update(Segt[now].ls,l,mid,v);
else Update(Segt[now].rs,mid+,r,v);
Pushup(now);
} int Merge(int x,int y,int l,int r)
{
if (!x || !y) {return x|y;}
int tmp=++sgt_num;
if (l==r)
{
Segt[tmp].max=Segt[x].max+Segt[y].max;
Segt[tmp].val=l; return tmp;
}
int mid=(l+r)>>;
Segt[tmp].ls=Merge(Segt[x].ls,Segt[y].ls,l,mid);
Segt[tmp].rs=Merge(Segt[x].rs,Segt[y].rs,mid+,r);
Pushup(tmp); return tmp;
} void DFS(int x,int fa)
{
for (int i=head[x]; i; i=edge[i].next)
if (edge[i].to!=fa)
{
DFS(edge[i].to,x);
Root[x]=Merge(Root[x],Root[edge[i].to],,n);
}
} int main()
{
scanf("%d",&n);
for (int i=; i<=n; ++i)
{
scanf("%d",&c[i]);
Update(Root[i],,n,c[i]);
}
for (int i=; i<=n-; ++i)
{
scanf("%d%d",&u,&v);
add(u,v); add(v,u);
}
DFS(,);
for (int i=; i<=n; ++i)
printf("%lld ",Segt[Root[i]].val);
}
CF600E:Lomsat gelral(线段树合并)的更多相关文章
- CF600E Lomsat gelral——线段树合并/dsu on tree
题目描述 一棵树有$n$个结点,每个结点都是一种颜色,每个颜色有一个编号,求树中每个子树的最多的颜色编号的和. 这个题意是真的窒息...具体意思是说,每个节点有一个颜色,你要找的是每个子树中颜色的众数 ...
- codeforces 600E . Lomsat gelral (线段树合并)
You are given a rooted tree with root in vertex 1. Each vertex is coloured in some colour. Let's cal ...
- CodeForces600E Lomsat gelral 线段树合并
从树上启发式合并搜出来的题 然而看着好像线段树合并就能解决??? 那么就用线段树合并解决吧 维护\(max, sum\)表示值域区间中的一个数出现次数的最大值以及所有众数的和即可 复杂度\(O(n \ ...
- CF600E Lomsat gelral 树上启发式合并
题目描述 有一棵 \(n\) 个结点的以 \(1\) 号结点为根的有根树. 每个结点都有一个颜色,颜色是以编号表示的, \(i\) 号结点的颜色编号为 \(c_i\). 如果一种颜色在以 \(x\) ...
- CF600E Lomsat gelral 【线段树合并】
题目链接 CF600E 题解 容易想到就是线段树合并,维护每个权值区间出现的最大值以及最大值位置之和即可 对于每个节点合并一下两个子节点的信息 要注意叶子节点信息的合并和非叶节点信息的合并是不一样的 ...
- CF600E Lomsat gelral (线段树合并)
相当于是线段树合并的模板题,比(雨天的尾巴)还要板. 唯一注意的是线段树的更新,因为同一子树中可能有多种颜色占主导地位,要输出编号和,比如一颗子树中,1出现3次(最多),3出现3次,那么应该输出4. ...
- codeforces 600E E. Lomsat gelral (线段树合并)
codeforces 600E E. Lomsat gelral 传送门:https://codeforces.com/contest/600/problem/E 题意: 给你一颗n个节点的树,树上的 ...
- BZOJ.3307.雨天的尾巴(dsu on tree/线段树合并)
BZOJ 洛谷 \(dsu\ on\ tree\).(线段树合并的做法也挺显然不写了) 如果没写过\(dsu\)可以看这里. 对修改操作做一下差分放到对应点上,就成了求每个点子树内出现次数最多的颜色, ...
- [XJOI NOI2015模拟题13] C 白黑树 【线段树合并】
题目链接:XJOI - NOI2015-13 - C 题目分析 使用神奇的线段树合并在 O(nlogn) 的时间复杂度内解决这道题目. 对树上的每个点都建立一棵线段树,key是时间(即第几次操作),动 ...
随机推荐
- [javaEE] http协议详细
上一篇:http://www.cnblogs.com/taoshihan/p/5346731.html HTTP请求 请求行 GET /taoshihan/p/5346731.html HTTP/1. ...
- eclipse启动项目报错:java.lang.ClassNotFoundException: ContextLoaderListener
eclipse 启动项目报错:找不到 Spring 监听器类 org.springframework.web.context.ContextLoaderListener 严重: Error confi ...
- Java转换Word文件到PDF文件
使用Docx4j将Word文件转换为PDF文件: public static void convertDocxToPDF(String docxFilePath, String pdfPath) th ...
- AGC009:Eternal Average
传送门 好神啊 直接考虑一棵 \(n+m\) 个叶子的 \(k\) 叉树,根结点权值为 \(\sum_{i\in m}(\frac{1}{k})^{deep_i}\) 对于一个 \(deep\) 的序 ...
- Fatal error: Call to undefined function curl_init()解决办法
问题描述: 在Windows SERVER 2012RC 64 bit OS, php 5.6.3的环境下,搭建好了php运行环境.但是在调用 curl_init() 方法时却报错了. 检查了一下,p ...
- bootstrapValidator验证中Maximum call stack size exceeded
Tip1:如果表单不是通过Bootstrap构建(即元素包含表单项且关联的label没有form-group类),可能会看到错误Uncaught RangeError: Maximum call st ...
- 关于redux
react将dom解耦,不用直接操作dom,使用了状态机制,当状态改变时视图就会相应更新.我们知道在react中,父组件可以将一些状态传递给子组件,让子组件的视图相应更新,这时我们会发现,只有有关联的 ...
- 网络I/O模型--07Netty基础
Netty 是由 JBOSS 提供的一个 Java 开源框架. Netty 提供异步的.事件驱动的网络应用程序框架和工具 ,用以快速开发高性能 . 高可靠性的网络服务器和客户端程序. Net ...
- Material适配1 - 入门篇
版权声明: 欢迎转载,但请保留文章原始出处 作者:GavinCT 出处:http://www.cnblogs.com/ct2011/p/4493384.html 随着Material Design的普 ...
- 读书笔记week1——涂涵越
这次读书笔记主要是就<程序员修炼之道>这本书的前半部分做一些总结以及发表一些自己的看法. 本书前面的一部分主要是一些程序员应该在工作中时刻注意的事情,一些关键的信息如下: 1.处理问题的态 ...