2019.01.19 bzoj5457: 城市(线段树合并)
传送门
线段树合并菜题。
题意简述:给一棵树,每个节点有bib_ibi个aia_iai民族的人,问对于每棵子树,子树中哪个民族的人最多,有多少人。
思路:
直接上线段树合并,边合并边维护答案即可。
为了代码方便可以用pairpairpair来维护答案。
代码:
#include<bits/stdc++.h>
#define ri register int
#define lc (son[p][0])
#define rc (son[p][1])
#define fi first
#define se second
using namespace std;
inline int read(){
	int ans=0;
	char ch=getchar();
	while(!isdigit(ch))ch=getchar();
	while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
	return ans;
}
const int N=4e5+5;
typedef pair<int,int> pii;
vector<int>e[N];
int n,m,tot=0,son[N*30][2],rt[N];
pii mx[N*30],ans[N];
inline void build(int&p,int l,int r,int k,int v){
	mx[p=++tot]=pii(v,-k),lc=rc=0;
	if(l==r)return;
	int mid=l+r>>1;
	k<=mid?build(lc,l,mid,k,v):build(rc,mid+1,r,k,v);
}
inline int merge(int x,int y,int l,int r){
	if(!x||!y)return x^y;
	if(mx[x].se^mx[y].se)mx[x]=max(mx[x],mx[y]);
	else mx[x]=pii(mx[x].fi+mx[y].fi,mx[x].se);
	if(l==r)return x;
	int mid=l+r>>1;
	son[x][0]=merge(son[x][0],son[y][0],l,mid);
	son[x][1]=merge(son[x][1],son[y][1],mid+1,r);
	return mx[x]=max(mx[son[x][0]],mx[son[x][1]]),x;
}
void dfs(int p,int fa){
	for(ri i=0,v;i<e[p].size();++i)if((v=e[p][i])^fa)dfs(v,p),rt[p]=merge(rt[p],rt[v],1,m);
	ans[p]=mx[rt[p]];
}
int main(){
	n=read(),m=read();
	for(ri i=1,u,v;i<n;++i)u=read(),v=read(),e[u].push_back(v),e[v].push_back(u);
	for(ri i=1,a,b;i<=n;++i)a=read(),b=read(),build(rt[i],1,m,a,b);
	dfs(1,0);
	for(ri i=1;i<=n;++i)cout<<-ans[i].se<<' '<<ans[i].fi<<'\n';
	return 0;
}
2019.01.19 bzoj5457: 城市(线段树合并)的更多相关文章
- BZOJ:5457: 城市(线段树合并)(尚待优化)
		5457: 城市 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 18 Solved: 12[Submit][Status][Discuss] Des ... 
- BZOJ #5457: 城市 [线段树合并]
		线段树合并的板子题,每次从下到上合并就完事了 // by Isaunoya #include <bits/stdc++.h> using namespace std; #define re ... 
- 2019.01.19 codeforces893F.Subtree Minimum Query(线段树合并)
		传送门 线段树合并菜题. 题意简述:给一棵带点权的有根树,多次询问某个点ppp子树内距离ppp不超过kkk的点的点权最小值,强制在线. 思路: 当然可以用dfsdfsdfs序+主席树水过去. 然而线段 ... 
- 2019.01.16 bzoj4399: 魔法少女LJJ(线段树合并)
		传送门 线段树合并菜题(然而findfindfind函数写错位置调了好久) 支持的操作题目写的很清楚了,然后有一个神奇的限制c≤7c\le7c≤7要注意到不然会去想毒瘤线段树的做法. 思路: 这题只有 ... 
- 2019.01.14 bzoj4530: [Bjoi2014]大融合(线段树合并)
		传送门 线段树合并菜题. 题意简述:nnn个点,支持连边以及查询一个点所在连通块中经过这个点的路径条数,保证这张图时刻为森林. 思路: 先建出所有操作完之后的树统计出dfsdfsdfs序 注意有可能是 ... 
- 【BZOJ5457】城市(线段树合并)
		点此看题面 大致题意: 一棵树上每个点有颜色\(a_i\)和权值\(b_i\),求以每个点为根的子树内权值和最大的颜色及其权值和. 线段树合并 这是一道线段树合并板子题. (关于线段树合并,可参考我的 ... 
- 2019.02.27 bzoj4556: [Tjoi2016&Heoi2016]字符串(二分答案+sam+线段树合并)
		传送门 题意:给一个字符串SSS. 有mmm次询问,每次给四个参数a,b,c,da,b,c,da,b,c,d,问s[a...b]s[a...b]s[a...b]的所有子串和s[x...y]s[x... ... 
- CEOI 2019 Day2 T2 魔法树 Magic Tree (LOJ#3166、CF1993B、and JOI2021 3.20 T3) (启发式合并平衡树,线段树合并)
		前言 已经是第三次遇到原题. 第一次是在 J O I 2021 S p r i n g C a m p \rm JOI2021~Spring~Camp JOI2021 Spring Camp 里遇到的 ... 
- 线段树合并 || BZOJ 5457: 城市
		题面:https://www.lydsy.com/JudgeOnline/problem.php?id=5457 题解: 线段树合并,对于每个节点维护sum(以该节点为根的子树中最大的种类和)和kin ... 
随机推荐
- 190. Reverse Bits (Int; Bit)
			Reverse bits of a given 32 bits unsigned integer. For example, given input 43261596 (represented in ... 
- 自动化测试之selenium工具简单介绍
			一.selenium简单介绍 1.selenium的成员 2.selenium工作原理 二.webdrive 常见元素定位 
- jsp页面\n换行替换
			1,js替换 var text= $(this).text(); var reg = new RegExp("\\n","g");//g,表示全部替换. tex ... 
- mybatis插入数据并获取主键值
			有时候我们的主键是自增的,但是我们想要在插入一条数据以后获取这条数据的主键值,而我们知道,mybatis执行完插入操作以后返回的是生效的记录数.那如何才能获取这个主键值呢. 1.在配置文件mapper ... 
- SQL2008用sql语句给字段添加说明
			EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'字段说明文字' , @level0type=N'SCHEMA',@l ... 
- No appenders could be found for logger
			在运行代码时,出现下面的错误, log4j:WARN No appenders could be found for logger (genericTest.GenericTest). log4j:W ... 
- 同一台主机部署两个比特币钱包以及rpc服务的摘要
			.bitcoin QA Test环境 启动指定参数: "C:\Program Files (x86)\Bitcoin\bitcoin-qt.exe" -testnet -serve ... 
- input 原生上传文件(type = file)
			1.表单上传文件的步骤: - 1)设置enctype 默认为:enctype="application/x-www-form-urlencoded"(一般不设置) 若要表单中有需要 ... 
- Vue  filter-v-for 使用
			var app5 = new Vue({ el: '#app5', data: { shoppingList: [ "Milk", "Donuts", &quo ... 
- C#—Dev XtraTabControl操作总结如动态增加Tab和关闭选项卡方法等
			1:显示行号 找到gridview属性 点击事件 CustomDrawRowIndicator private void gridView1_CustomDrawRowIndicator(object ... 
