bzoj5457 城市
一棵树,每个点有一个民族,和一个人数,求每个子树里最多的民族及其人数,如果一样,输出编号最小的
$n \leq 500000$
sol:
卡莫队的毒瘤题,需要 dsu on tree
大概就是 dfs 顺便维护一个数组叫“当前答案”,每次先把轻儿子加进来,再把重儿子加进来,然后把轻儿子删掉,重儿子继承这个“当前答案”数组
然后由于两点间最多有 log 条重链,复杂度很对劲
#include <bits/stdc++.h>
#define LL long long
#define rep(i, s, t) for (register int i = (s), i##end = (t); i <= i##end; ++i)
#define dwn(i, s, t) for (register int i = (s), i##end = (t); i >= i##end; --i)
using namespace std;
inline int read() {
int x = , f = ; char ch;
for (ch = getchar(); !isdigit(ch); ch = getchar()) if (ch == '-') f = -f;
for (; isdigit(ch); ch = getchar()) x = * x + ch - '';
return x * f;
}
const int maxn = ;
int n, m, a[maxn], b[maxn];
int first[maxn], to[maxn << ], nx[maxn << ], pnt;
inline void add(int u, int v) {
to[++pnt] = v;
nx[pnt] = first[u];
first[u] = pnt;
}
int fa[maxn], mxs[maxn], size[maxn];
inline void dfs1(int x) {
size[x] = ;
for(int i=first[x];i;i=nx[i]) {
if(to[i] == fa[x]) continue;
fa[to[i]] = x;
dfs1(to[i]); size[x] += size[to[i]];
if(size[to[i]] > size[mxs[x]]) mxs[x] = to[i];
}
}
int cnt[maxn], now;
int ans[maxn], ansn[maxn];
inline void cal(int x, int opt) {
cnt[b[x]] += opt * a[x];
if((cnt[b[x]] > cnt[now]) || ((cnt[b[x]] == cnt[now]) && (b[x] < now) && (opt == ))) now = b[x];
for(int i=first[x];i;i=nx[i])
if(to[i] != fa[x]) cal(to[i], opt);
}
inline void dfs(int x, int opt) {
for(int i=first[x];i;i=nx[i])
if(to[i] != fa[x] && to[i] != mxs[x]) dfs(to[i], );
if(mxs[x]) dfs(mxs[x], );
for(int i=first[x];i;i=nx[i])
if(to[i] != fa[x] && to[i] != mxs[x]) cal(to[i], );
cnt[b[x]] += a[x];
if((cnt[b[x]] > cnt[now]) || ((cnt[b[x]] == cnt[now]) && (b[x] < now))) now = b[x];
ans[x] = now; ansn[x] = cnt[now];
if(!opt) now = , cal(x, -);
}
int main() {
n = read(), m = read();
rep(i, , n) {
int u = read(), v = read();
add(u, v); add(v, u);
} dfs1(); cnt[] = -;
rep(i, , n) b[i] = read(), a[i] = read();
dfs(, );
rep(i, , n) printf("%d %d\n", ans[i], ansn[i]);
}
bzoj5457 城市的更多相关文章
- [bzoj5457]城市_dsu on tree
bzoj 5457 城市 题目大意 给定一棵以\(1\)为根的\(n\)个节点的有根树. 每个节点有一个民族和该民族在当前节点的人数. 有\(n\)个询问,第\(i\)个询问是求以\(i\)为根的子树 ...
- 2019.01.19 bzoj5457: 城市(线段树合并)
传送门 线段树合并菜题. 题意简述:给一棵树,每个节点有bib_ibi个aia_iai民族的人,问对于每棵子树,子树中哪个民族的人最多,有多少人. 思路: 直接上线段树合并,边合并边维护答案即可. ...
- dsu on tree(无讲解)
CF741D. Arpa's letter-marked tree and Mehrdad's Dokhtar-kosh paths 分析: 最多有一个字符出现奇数次 维护某个状态下深度的最大值,注意 ...
- 【BZOJ5457】城市(线段树合并)
点此看题面 大致题意: 一棵树上每个点有颜色\(a_i\)和权值\(b_i\),求以每个点为根的子树内权值和最大的颜色及其权值和. 线段树合并 这是一道线段树合并板子题. (关于线段树合并,可参考我的 ...
- 【开源】分享2011-2015年全国城市历史天气数据库【Sqlite+C#访问程序】
由于个人研究需要,需要采集天气历史数据,前一篇文章:C#+HtmlAgilityPack+XPath带你采集数据(以采集天气数据为例子),介绍了基本的采集思路和核心代码,经过1个星期的采集,历史数据库 ...
- 根据ip判断返回城市名称查询当地天气
<?phpheader("content-type:text/html;charset=utf-8");date_default_timezone_set("Asi ...
- 使用page object模式抓取几个主要城市的pm2.5并从小到大排序后写入txt文档
#coding=utf-8from time import sleepimport unittestfrom selenium import webdriverfrom selenium.webdri ...
- geolocation/ 百度地图api Geolocation 定位当前城市信息
根据当前所处位置 定位所在城市信息 <html> <head> <meta charset="UTF-8" /> <title>js ...
- h5手机端下拉选择城市
<!doctype html><html> <head> <meta http-equiv="Content-Type& ...
随机推荐
- VMware虚拟机NAT模式的具体配置
NAT模式的具体配置 NAT方式:虚拟机可以上外网,可以访问宿主计算机所在网络的其他计算机(反之不行). 1.1.1. 查看虚拟机的网络参数 1) 打开虚拟机,选择菜单&q ...
- I.MX6Q(TQIMX6Q/TQE9)学习笔记——U-Boot移植
其实Freescale的BSP移植文档已经将u-boot的移植步骤讲述的非常详细了,但为了以后方便查阅,还是按照自己的理解记录在这里. 获取源码 根据前一篇文章搭建好LTIB环境后就可以非常方便的导出 ...
- 网络:W5500 UDP数据包格式注意事项
1. 主题 使用W5500测试UDP功能,发现收到的数据包和wireshark抓包的数据不同. 原来W5500接收寄存器的数据包并不是网络上的数据流,而是经过内部处理后展现出来的. 对于这个问题目前 ...
- 学习C#之旅 冒泡排序,选择排序,插入排序,希尔排序[资料收集]
关于冒泡排序,选择排序,插入排序,希尔排序[资料收集] 以下资料来源与网络 冒泡排序:从后到前(或者从前到后)相邻的两个两两进行比较,不满足要求就位置进行交换,一轮下来选择出一个最小(或最大)的放到 ...
- java屏幕截取
CaptureScreen.java ```import java.awt.Dimension; import java.awt.Rectangle; import java.awt.Robot; i ...
- body-parser小解
body-parser用来解析http请求体,对不同的content-type有不同的处理方式, 首先介绍一下常见的四种Content-Type: 1.application/x-www-form-u ...
- Linux挂载第二块硬盘操作方法
远程SSH登录上Centos服务器后,进行如下操作 提醒:挂载操作会清空数据,请确认挂载盘无数据或者未使用 第一步:列出所有已挂载磁盘 命令: disk -h [root@gluster_node1 ...
- IDEA配置文件的保存目录
IntelliJ IDEA 的实时代码模板保存在 /templates 目录下,其他系统目录位置如下:(因为目录名在各个系统上是一致的,建议用硬盘搜索工具搜索即可) Windows: . Linux: ...
- Hive数据类型总结
转载自:http://blog.csdn.net/chenxingzhen001/article/details/20901045 Hive的内置数据类型可以分为两大类:(1).基础数据类型:(2). ...
- org.apache.http.NoHttpResponseException: XX.XX.XX.XX:80 failed to respond
解决: Finally I fix the issue and it is caused by buffer size. By default, buffer size of httpclient i ...