[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为根节点的树,每个节点都有一个颜色,问每个节点的子树中,颜色最 ...
随机推荐
- 20155238 《JAVA程序设计》实验三(敏捷开发与XP实践)实验报告
实验内容 敏捷开发与XP实践 XP基础 XP核心实践 相关工具 实验要求 1.没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim编辑器> 课程 2.完成实 ...
- 20155306 白皎 0day漏洞——漏洞利用原理之GS
20155306 白皎 0day漏洞--漏洞利用原理之GS 一.GS安全编译选项的保护原理 1.1 GS的提出 在第二篇博客(栈溢出利用)中,我们可以通过覆盖函数的返回地址来进行攻击,面对这个重灾区, ...
- 20155310 Exp6 信息收集与漏洞扫描
20155310 Exp6 信息收集与漏洞扫描 基础问题回答 1.哪些组织负责DNS,IP的管理. 顶级的管理者是Internet Corporation for Assigned Names and ...
- 20155310 《网络攻防》Exp4 恶意代码分析
20155310 <网络攻防>Exp4 恶意代码分析 基础问题 1.如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么.请设计下你想监控的操作有哪些, ...
- EZ 2018 02 26 NOIP2018 模拟赛(一)
这次是校内OJ(HHHOJ)线上比赛,网址:http://211.140.156.254:2333/contest/51 (我去刚刚快写完了手贱关掉了) 这次总体难度也不高,T1&&T ...
- 总结 : C#事件理解
要理解事件,首先必须理解委托!! 1.如果说委托是一个类型,那么事件就是一个对象! 2.事件的创建必须是借助某个委托类型来完成的! 3.也就是说,委托是事件的类型,事件本身是个对象!! 4.所以,事件 ...
- WordPress留言本插件推荐
WordPress不借助于任何插件也可以做个留言本,那就是建个 Page, 直接使用它的评论功能即可,而且给评论加上 Ajax 功能.WYSIWYG.引用.回复.留言分页等功能也可以做的很漂亮.但对于 ...
- EAS_BI(扩展报表)
case when 的使用 1. 扩展报表,一张收费单据中,下面分为分录 问题描述: 收费单中有一个分录用于记录检测的项目名称以及标准费用.收费单有自己的主键,分录中的外键即是收费单的主键,然后分录表 ...
- web网站的并发量级别
web网站的并发量级别 评价一个网站的“大小”,处于视角的不同,有很多种衡量的方法,类似文章数,页面数之类的数据非常明显,也没有什么可以争议的.但对于并发来说,争议非常之多,这里就从一个技术的角度开始 ...
- Serverless架构详解:开发者如何专注于业务代码本身?
本文来自腾讯云技术沙龙,本次沙龙主题为Serverless架构开发与SCF部署实践 演讲嘉宾:黄文俊,曾负责企业级存储.企业级容器平台等产品的架构与开发,目前主要负责SCF腾讯无服务器云函数产品相关. ...