[Coderforces600E] Lomsat gelral
大意是每个点有一个颜色,询问以每个点为根的子树中出现次数最多的颜色是谁,如果有多个输出编号和。
这个东西用数据结构是不太好做的,考虑优化暴力。
首先最裸的的暴力就是在dfs序上跑莫队,但因为是树的结构所以有更优美的暴力。
参考的博客:http://www.cnblogs.com/candy99/p/dsuontree.html
类似树上启发式合并,叫做dsu on tree。
0.首先轻重链剖分。
1.然后先处理轻儿子,处理完把贡献删除。
2.处理重儿子,保留贡献。
3.把轻儿子的贡献再加上。
4.算这个点的答案。
5.如果这个点是轻儿子就把数组里的东西清空。
因为每个点到根只有$log$条轻链,所以在执行3和5时每个点最多加入删除$log$次。
复杂度$nlogn$
#include<bits/stdc++.h>
#define ll long long
#define N 100005
using namespace std;
int v[N],head[N],ver[N*2],nxt[N*2],tot;
void add(int a,int b)
{
tot++;nxt[tot]=head[a];head[a]=tot;ver[tot]=b;return;
}
int n,size[N],son[N];
void dfs(int x,int f)
{
size[x]=1;
for(int i=head[x];i;i=nxt[i])
{
if(ver[i]==f)continue;
dfs(ver[i],x);
size[x]+=size[ver[i]];
if(size[ver[i]]>size[son[x]])son[x]=ver[i];
}
}
int cnt[N];
ll sum[N],ans[N];
int mx;
void ds(int x,int f,int z)
{
sum[cnt[v[x]]]-=v[x];
cnt[v[x]]+=z;
sum[cnt[v[x]]]+=v[x];
if(cnt[v[x]]>mx)mx=cnt[v[x]];
else if(sum[mx]==0)mx--;
for(int i=head[x];i;i=nxt[i])
{
if(ver[i]==f)continue;
ds(ver[i],x,z);
}
}
void dffs(int x,int f,int op)
{
for(int i=head[x];i;i=nxt[i])
{
if(ver[i]==f||ver[i]==son[x])continue;
dffs(ver[i],x,0);
}
if(son[x])dffs(son[x],x,1);
sum[cnt[v[x]]]-=v[x];
cnt[v[x]]++;
sum[cnt[v[x]]]+=v[x];
if(cnt[v[x]]>mx)mx=cnt[v[x]];
for(int i=head[x];i;i=nxt[i])
{
if(ver[i]==f||ver[i]==son[x])continue;
ds(ver[i],x,1);
}
ans[x]=sum[mx];
if(!op)ds(x,f,-1);
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%d",&v[i]);
int t1,t2;
for(int i=1;i<n;i++)
{
scanf("%d%d",&t1,&t2);
add(t1,t2);add(t2,t1);
}
dfs(1,-1);
dffs(1,-1,0);
for(int i=1;i<=n;i++)
{
printf("%I64d ",ans[i]);
}
return 0;
}
[Coderforces600E] Lomsat gelral的更多相关文章
- Educational Codeforces Round 2 E. Lomsat gelral 启发式合并map
E. Lomsat gelral Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/600/prob ...
- Codeforces 600 E - Lomsat gelral
E - Lomsat gelral 思路1: 树上启发式合并 代码: #include<bits/stdc++.h> using namespace std; #define fi fir ...
- 【CF600E】 Lomsat gelral
CF600E Lomsat gelral Solution 考虑一下子树的问题,我们可以把一棵树的dfn序搞出来,那么子树就是序列上的一段连续的区间. 然后就可以莫队飞速求解了. 但是这题还有\(\T ...
- 【CodeForces】600 E. Lomsat gelral (dsu on tree)
[题目]E. Lomsat gelral [题意]给定n个点的树,1为根,每个点有一种颜色ci,一种颜色占领一棵子树当且仅当子树内没有颜色的出现次数超过它,求n个答案——每棵子树的占领颜色的编号和Σc ...
- 【CF600E】Lomsat gelral(dsu on tree)
[CF600E]Lomsat gelral(dsu on tree) 题面 洛谷 CF题面自己去找找吧. 题解 \(dsu\ on\ tree\)板子题 其实就是做子树询问的一个较快的方法. 对于子树 ...
- CF 600 E. Lomsat gelral
E. Lomsat gelral http://codeforces.com/contest/600/problem/E 题意: 求每个子树内出现次数最多的颜色(如果最多的颜色出现次数相同,将颜色编号 ...
- Codeforces 600E - Lomsat gelral(树上启发式合并)
600E - Lomsat gelral 题意 给出一颗以 1 为根的树,每个点有颜色,如果某个子树上某个颜色出现的次数最多,则认为它在这课子树有支配地位,一颗子树上,可能有多个有支配的地位的颜色,对 ...
- Codeforces 600E Lomsat gelral (树上启发式合并)
题目链接 Lomsat gelral 占坑……等深入理解了再来补题解…… #include <bits/stdc++.h> using namespace std; #define rep ...
- CF EDU - E. Lomsat gelral 树上启发式合并
学习:http://codeforces.com/blog/entry/44351 E. Lomsat gelral 题意: 给定一个以1为根节点的树,每个节点都有一个颜色,问每个节点的子树中,颜色最 ...
随机推荐
- 线程池原理及python实现
为什么需要线程池 目前的大多数网络服务器,包括Web服务器.Email服务器以及数据库服务器等都具有一个共同点,就是单位时间内必须处理数目巨大的连接请求,但处理时间却相对较短. 传统多线程方案中我们采 ...
- 20155331 丹增旦达 网络攻防 Exp2后门原理与实践
20155331 丹增旦达<网络攻防>Exp2后门原理与实践 实验内容 (1)使用netcat获取主机操作Shell,cron启动 (2)使用socat获取主机操作Shell, 任务计划启 ...
- 【HNOI2018】游戏
题面 题解 这道题目到底有没有靠谱一点的解法啊... 有很多种\(\color{green}{\mathrm{AC}}\)的方法,设\(L[i],R[i]\)表示点\(i\)最左边和最右边能够到达的位 ...
- angularJs 技巧总结及最佳实践
强烈建议通读官方wiki文档,里面包含了FAQ,最佳实践,深入理解最核心的Directive及Scope等文章, 基础 1. 使用ng-repeat指令,为防止重复值发生的错误.加上track by ...
- Centos7下python3安装ipython
一.通过压缩包安装ipython 1.下载ipython安装包 [root@localhost ~]# wget https://pypi.python.org/packages/79/63/b671 ...
- mongodb安装教程
MongoDB 下载及安装 MongoDB 提供了可用于 32 位和 64 位系统的预编译二进制包,你可以从MongoDB官网下载安装,MongoDB 预编译二进制包下载地址:https://www. ...
- R实战 第九篇:数据标准化
数据标准化处理是数据分析的一项基础工作,不同评价指标往往具有不同的量纲,数据之间的差别可能很大,不进行处理会影响到数据分析的结果.为了消除指标之间的量纲和取值范围差异对数据分析结果的影响,需要对数据进 ...
- 通过C#的HttpClient模拟form表单请求
post提交表单一般无非是一般text文本和文件类型,如下 <input type="file"/> <input type="text"/& ...
- SpringBoot入门学习记录(一)
最近,SpringBoot.SpringCloud.Dubbo等框架非常流行,作为Coder里的一名小学生,借着改革开放的东风,自然也是需要学习学习的,于是将学习经历记录于此,以备日后查看. 官网:h ...
- 12.22daily_scrum
今天是我们小组M2阶段开始一周结束,各项工作进入一个阶段性的总结过程,悬浮窗的设计也已经告一段落进入调试的阶段,新的工作任务有了添加,即滑锁密码的加入,更好地加深了用户体验性,软件的可用性也进一步加强 ...