JZOJ5833 永恒
题目大意
给你一个树,每个节点上有有一个部落,以及部落的人数,要你求出每个节点的子树里面人数最多的部落是哪一个(人数相同部落编号最小的)。
思路
全网第一篇分治题解
考虑树的dfs序,然后分治处理,每层只处理跨过mid的区间,然后就完了。
时间复杂度\(O(nlogn)\),但常数比树上启发式合并小。
Code
#include <cstdio>
#include <cstdlib>
#include <cstring>
#define Re register
#define ll long long
bool st;
const int N = 400000 + 5;
inline int read() {
int ret = 0, f = 0; char ch;
do {
ch = getchar();
if (ch == '-') f = 1;
} while (ch < '0' || ch > '9');
do {
ret = (ret << 3) + (ret << 1) + ch - '0';
ch = getchar();
} while (ch <= '9' && ch >= '0');
return f ? - ret : ret;
}
inline void hand_in() {
freopen("endless.in", "r", stdin);
freopen("endless.out", "w", stdout);
}
struct Graph {
int to[N << 1], nxt[N << 1], head[N], cnt;
inline void add(int x, int y) {
++cnt;
to[cnt] = y, nxt[cnt] = head[x], head[x] = cnt;
}
}G;
int n, m, a[N], b[N];
struct Node { int val, id; }ans[N];
int dfn[N], sz[N], tot, id[N];
inline void dfs(int u, int fa) {
dfn[u] = ++ tot;
id[tot] = u;
sz[u] = 1;
for (Re int i = G.head[u];i;i = G.nxt[i]) {
int v = G.to[i];
if (v == fa) continue;
dfs(v, u);
sz[u] += sz[v];
}
}
int c[N], sta[N], top;
inline void cal(int l, int r) {
if (l >= r) {
if (sz[id[l]] == 1) ans[id[l]].id = a[id[l]], ans[id[l]].val = b[id[l]];
return;
}
int mid = (l + r) >> 1;
cal(l, mid), cal(mid + 1, r);
top = 0;
int mx = 0, ids, p = mid + 1;
for (int i = mid;i >= l; --i) {
int u = id[i];
sta[++top] = a[u];
c[a[u]] += b[u];
if (c[a[u]] > mx || (c[a[u]] == mx && ids > a[u])) mx = c[a[u]], ids = a[u];
int ed = i + sz[u] - 1;
if (ed <= mid || ed > r) continue;
while (p <= ed) {
int v = id[p];
c[a[v]] += b[v];
sta[++top] = a[v];
if (c[a[v]] > mx || (c[a[v]] == mx && ids > a[v])) mx = c[a[v]], ids = a[v];
p ++;
}
ans[u].val = mx, ans[u].id = ids;
}
for (Re int i = 1;i <= top; ++i) c[sta[i]] = 0;
}
bool ed;
int main() {
hand_in();
n = read(), m = read();
for (Re int i = 1, u, v;i < n; ++i) {
u = read(), v = read();
G.add(u, v), G.add(v, u);
}
for (Re int i = 1;i <= n; ++i) {
a[i] = read(), b[i] = read();
}
dfs(1, 0), cal(1, n);
for (int i = 1;i <= n; ++i) {
printf("%d %d\n", ans[i].id, ans[i].val);
}
return 0;
}
JZOJ5833 永恒的更多相关文章
- hihocoder #1179 : 永恒游戏 暴力
#1179 : 永恒游戏 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://hihocoder.com/problemset/problem/11 ...
- Android内存、性能是程序永恒的话题
内存.性能是程序永恒的话题,实际开发中关于卡顿.OOM也经常是打不完的两只老虎,关于卡顿.OOM的定位方法和工具比较多,这篇文章也不打算赘述了,本章主要是来整理一下JVM的内存模型以及Java对象的生 ...
- 文件:因为懂你,所以永恒 - 零基础入门学习Python028
文件:因为懂你,所以永恒 让编程改变世界 Change the world by program 因为懂你,所以永恒 大多数的程序都遵循着:输入->处理->输出的模型,首先接受输入数据,然 ...
- NSA永恒之蓝病毒,如何通过360工具修复?
简介: NSA武器库的公开被称为是网络世界"核弹危机",其中有十款影响Windows个人用户的黑客工具,包括永恒之蓝.永恒王者.永恒浪漫.永恒协作.翡翠纤维.古怪地鼠.爱斯基摩卷. ...
- “永恒之蓝"漏洞的紧急应对--毕业生必看
早上6点多起床了,第一次起这么早,昨天晚上12点多,看到了一则紧急通知,勒索软件通过微软"永恒之蓝"漏洞针对教育网进行了大规模的攻击,而且有很多同学中招.中招后的结果如下图所示. ...
- 由"永恒之蓝"病毒而来的电脑科普知识
永恒之蓝病毒事件: 继英国医院被攻击,随后在刚刚过去的5月12日晚上20点左右肆虐中国高校的WannaCry勒索事件,全国各地的高校学生纷纷反映,自己的电脑遭到病毒的攻击,文档被加密,壁纸遭到篡改,并 ...
- 关于NSA的EternalBlue(永恒之蓝) ms17-010漏洞利用
好久没有用这个日志了,最近WannaCry横行,媒体铺天盖地的报道,我这后知后觉的才想起来研究下WannaCry利用的这个原产于美帝的国家安全局发现的漏洞,发现漏洞不说,可以,自己偷偷 ...
- 建筑的永恒之道 (C·亚历山大 著)
永恒之道 建筑或城市只有踏上了永恒之道,才会生机勃勃. 第1章 永恒之道 它是一个唯有我们自己才能带秩序的过程,它不可能被求取,但只要我们顺应它,它便会自然而然地出现. 质 为了探求永恒之道,我们首先 ...
- “永恒之蓝”(Wannacry)蠕虫全球肆虐 安装补丁的方法
“永恒之蓝”利用0day漏洞 ,通过445端口(文件共享)在内网进行蠕虫式感染传播,没有安装安全软件或及时更新系统补丁的其他内网用户就极有可能被动感染,所以目前感染用户主要集中在企业.高校等内网环境下 ...
随机推荐
- PHP Record the number of login users
Function to record how many times the user logs in Connect to the database first: you can create a n ...
- 《微信小程序商城开发实战》唐磊,全网真实评价截图,不吹不黑,全部来自网友的真实评价
偶尔看了下网友的销量和评价,感觉还不错,因为市面上大多关于小程序的书籍可能写的不够全面,要么只是点到为止的大致罗列,要么就是只简单介绍一下小程序的 界面设计这块.这样很难给学习小程序开发的人一个完成的 ...
- 制作镜像文件工具packer
openstack镜像制作要在openstack上创建虚拟机,必然要使用到虚拟机镜像. 对于普通用户,可以使用已经创建好的虚拟机镜像.一般是操作系统官方构建并提供的. 某些用户可以有自己独特的需求,需 ...
- Curator框架实现ZooKeeper分布式锁
排他锁(X) 这里主要讲讲分布式锁中的排他锁.排他锁(Exclusive Locks,简称X锁),又称为写锁或独占锁,是一种基本的锁类型.如果事务T1对数据对象O1加上了排他锁,那么在整个加锁期间,只 ...
- php laravel 环境搭建
最近上一个新项目,时间比较紧,为了满足业务需求,没有办法,只有上我大 php 了,找了一个带些基础的数据结构,用的是 laravel 搭建的,然后寻坑就开始了,先是构建 docker 镜像就坑了,然后 ...
- GEOS/GDAL 交叉编译ARM64-linux版本
目录 安装编译环境 编译PROJ.4 编译GEOS 编译GDAL 编译后程序运行注意事项 因为试用华为云ARM64服务器(CentOS 7 操作系统)的时候,在云服务器上编译GDAL很长时间也没有编译 ...
- WebDataBinder 学习顺序
01. 关于Spring属性处理器PropertyResolver以及应用运行环境Environment的深度分析,强大的StringValueResolver使用和解析[享学Spring] http ...
- 几个简单易用的IDEA快捷键
常见的几个Idea的代码快捷键 格式化代码: Ctrl + Alt + L Optimize Imports(优化包引用): Ctrl-Alt-O 单行注释(//): Ctrl-/ 块注释(/*... ...
- (mysql)找不到请求的.Net Framework Data Provider。可能没有安装
webconfig配置以下节点(注意版本号) 将下面代码放在machine.config中文件,如何Web.config文件没有配置,需要添加 <system.data> <DbPr ...
- java多线程(四)死锁
1.1. 什么是死锁 多线程以及多进程改善了系统资源的利用率并提高了系统的处理能力.然而,并发执行也带来了新的问题--死锁. 所谓死锁是指多个线程因竞争资源而造成的一种僵局(互相等待),若无外力作用, ...