CF 600E. Lomsat gelral(dsu on tree)
解题思路
\(dsu\) \(on\) \(tree\)的模板题。暴力而优雅的算法,轻儿子的信息暴力清空,重儿子的信息保留,时间复杂度\(O(nlogn)\)
代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<set>
using namespace std;
const int MAXN = 100005;
typedef long long LL;
inline int rd(){
int x=0,f=1;char ch=getchar();
while(!isdigit(ch)) f=ch=='-'?0:1,ch=getchar();
while(isdigit(ch)) x=(x<<1)+(x<<3)+ch-'0',ch=getchar();
return f?x:-x;
}
int n,c[MAXN],head[MAXN],cnt,to[MAXN<<1],nxt[MAXN<<1],num[MAXN],sum[MAXN];
int siz[MAXN],son[MAXN],fa[MAXN],Num;
LL ans[MAXN],Max[MAXN],Ans;
inline void add(int bg,int ed){
to[++cnt]=ed,nxt[cnt]=head[bg],head[bg]=cnt;
}
inline void update(int x){
sum[num[c[x]]]--;Max[num[c[x]]]-=c[x];
num[c[x]]++;sum[num[c[x]]]++;Max[num[c[x]]]+=c[x];
if(Num<=num[c[x]]) Num=num[c[x]];Ans=Max[Num];
}
inline void Clear(int x){
sum[num[c[x]]]--;Max[num[c[x]]]-=c[x];
num[c[x]]--;sum[num[c[x]]]++;Max[num[c[x]]]+=c[x];
if(Num==num[c[x]]+1 && !sum[num[c[x]]+1]) Num=num[c[x]];
Ans=Max[Num];
}
void bfs(int x){
update(x);
for(int i=head[x];i;i=nxt[i])
if(to[i]!=fa[x]) bfs(to[i]);
}
void clear(int x){
Clear(x);
for(int i=head[x];i;i=nxt[i])
if(to[i]!=fa[x]) clear(to[i]);
}
void dfs1(int x,int f){
fa[x]=f;siz[x]=1;int maxson=-1,u;
for(int i=head[x];i;i=nxt[i]){
u=to[i];if(u==f) continue;
dfs1(u,x);siz[x]+=siz[u];
if(siz[u]>maxson) maxson=siz[u],son[x]=u;
}
}
void dfs2(int x){
for(int i=head[x];i;i=nxt[i]){
int u=to[i];if(u==fa[x] || u==son[x]) continue;
dfs2(u);clear(u);
}
if(son[x]) dfs2(son[x]);
for(int i=head[x];i;i=nxt[i]){
int u=to[i];if(u==fa[x] || u==son[x]) continue;
bfs(u);
}update(x);
ans[x]=Ans;
}
int main(){
n=rd();int x,y;
for(int i=1;i<=n;i++) c[i]=rd();
for(int i=1;i<n;i++){
x=rd(),y=rd();
add(x,y);add(y,x);
}dfs1(1,0);dfs2(1);
for(int i=1;i<=n;i++) printf("%lld ",ans[i]);
return 0;
}
CF 600E. Lomsat gelral(dsu on tree)的更多相关文章
- Codeforces.600E.Lomsat gelral(dsu on tree)
题目链接 dsu on tree详见这. \(Description\) 给定一棵树.求以每个点为根的子树中,出现次数最多的颜色的和. \(Solution\) dsu on tree模板题. 用\( ...
- Codeforces 600E. Lomsat gelral(Dsu on tree学习)
题目链接:http://codeforces.com/problemset/problem/600/E n个点的有根树,以1为根,每个点有一种颜色.我们称一种颜色占领了一个子树当且仅当没有其他颜色在这 ...
- 【CodeForces】600 E. Lomsat gelral (dsu on tree)
[题目]E. Lomsat gelral [题意]给定n个点的树,1为根,每个点有一种颜色ci,一种颜色占领一棵子树当且仅当子树内没有颜色的出现次数超过它,求n个答案——每棵子树的占领颜色的编号和Σc ...
- cf600E. Lomsat gelral(dsu on tree)
题意 题目链接 给出一个树,求出每个节点的子树中出现次数最多的颜色的编号和 Sol dsu on tree的裸题. 一会儿好好总结总结qwq #include<bits/stdc++.h> ...
- codeforces600E. Lomsat gelral(dsu on tree)
dsu on tree先分轻重儿子先处理轻边,再处理重儿子再加上轻儿子的答案 #include<iostream> #include<cstdio> #include<q ...
- 【Codeforces】600E. Lomsat gelral
Codeforces 600E. Lomsat gelral 学习了一下dsu on tree 所以为啥是dsu而不是dfs on tree??? 这道题先把这棵树轻重链剖分了,然后先处理轻儿子,处理 ...
- Codeforces 600E - Lomsat gelral(树上启发式合并)
600E - Lomsat gelral 题意 给出一颗以 1 为根的树,每个点有颜色,如果某个子树上某个颜色出现的次数最多,则认为它在这课子树有支配地位,一颗子树上,可能有多个有支配的地位的颜色,对 ...
- Codeforces 600E Lomsat gelral(dsu on tree)
dsu on tree板子题.这个trick保证均摊O(nlogn)的复杂度,要求资瓷O(1)将一个元素插入集合,清空集合时每个元素O(1)删除.(当然log的话就变成log^2了) 具体的,每次先遍 ...
- Codeforces 600E - Lomsat gelral 「$Dsu \ on \ tree$模板」
With $Dsu \ on \ tree$ we can answer queries of this type: How many vertices in the subtree of verte ...
随机推荐
- 工程师技术(四):配置SMB文件夹共享、多用户Samba挂载、普通NFS共享的实现、安全NFS共享的实现
一.配置SMB文件夹共享 目标: 本例要求在虚拟机 server0 上发布两个共享文件夹,具体要求如下: 1> 此服务器必须是 STAFF 工作组的一个成员 2> 发布目录 /comm ...
- <自动化测试>之<unittest框架使用1>
要说单元测试和UI自动化之间的是什么样的一个关系,说说我个人的一些心得体会吧,我并没有太多的这方面经验,由于工作本身就用的少,还有就是功能测试点点对于我这种比较懒惰的人来说,比单元测试复杂...思考单 ...
- linux之-mysql数据库2
1.新建数据库 语句格式为 CREATE DATABASE <数据库名字>;,(注意不要漏掉分号 ;),前面的 CREATE DATABASE 也可以使用小写,具体命令为: 2.连接数据库 ...
- percona-toolkit工具包的安装和初步使用
percona-toolkit工具包的安装和初步使用 原文地址:http://blog.csdn.net/yumushui/article/details/42919601 一.percona-too ...
- SQL Server中char、varchar、text和nchar、nvarchar、ntext的区别 (转)
转:http://blog.csdn.net/jackychu/article/details/4183118 http://www.cnblogs.com/jhxk/articles/1633578 ...
- MySQL配置(二)
上篇文章简单的讲了一下MySQL的配置,这章我在具体讲述一下我所配置的一些内容. 一.密码策略 MySQL5.7默认安装了密码安全检查的插件.默认密码检查策略要求密码必须包含:大小写字母 ...
- MATLAB图像uint8,uint16,double, rgb转灰度解释
1.uint8,uint16与double 为了节省存储空间,matlab为图像提供了特殊的数据类型uint8(8位无符号整数),以此方式存储的图像称作8位图像.matlab读入图像的数据是uint8 ...
- Mint安装配置Sublime Text3
1.注册码: Sublime Text 3 3126 注册码 2.安装Package Control组件: 按Ctrl+`调出console(注:安装有QQ输入法的这个快捷键会有冲突的,输入法属性设置 ...
- javascript中var同时声明多个变量时的原理是什么?
<script> function show(){ var a=b=c=d=5; } show(); alert(a);//弹a时报错(not defined),而b.c.d都能弹出5 & ...
- 隐式激活Activity