bzoj5457
城市
Input
Output
Sample Input
Sample Output
2 13 1 10 5 6 1 10 1 10 5 6 1 10 4 6
sol:非常模板的线段树合并
#include <bits/stdc++.h>
using namespace std;
typedef int ll;
inline ll read()
{
ll s=;
bool f=;
char ch=' ';
while(!isdigit(ch))
{
f|=(ch=='-'); ch=getchar();
}
while(isdigit(ch))
{
s=(s<<)+(s<<)+(ch^); ch=getchar();
}
return (f)?(-s):(s);
}
#define R(x) x=read()
inline void write(ll x)
{
if(x<)
{
putchar('-'); x=-x;
}
if(x<)
{
putchar(x+''); return;
}
write(x/);
putchar((x%)+'');
return;
}
#define W(x) write(x),putchar(' ')
#define Wl(x) write(x),putchar('\n')
const int N=;
#define Mp make_pair
#define pii pair<int,int>
int n,m,A[N],B[N];
int rt[N],cnt=;
vector<int>E[N];
pii Ans[N];
inline void Link(int x,int y){E[x].push_back(y); E[y].push_back(x);}
struct Node
{
int ls,rs;
pii mx;
}T[N*];
inline pii pmax(pii a,pii b)
{
return ((a.first>b.first)||(a.first==b.first&&a.second<b.second))?a:b;
}
inline void PushUp(int x)
{
T[x].mx=pmax(T[T[x].ls].mx,T[T[x].rs].mx);
}
inline void Insert(int &x,int l,int r,int id,int num)
{
if(!x) x=++cnt;
if(l==r) {T[x].mx=Mp(num,id); return;}
int mid=(l+r)>>;
if(id<=mid) Insert(T[x].ls,l,mid,id,num);
else Insert(T[x].rs,mid+,r,id,num);
PushUp(x);
}
inline int Merg(int x,int y,int l,int r)
{
if(x*y==) return x+y;
if(l==r) {T[x].mx.first+=T[y].mx.first; return x;}
int mid=(l+r)>>;
T[x].ls=Merg(T[x].ls,T[y].ls,l,mid);
T[x].rs=Merg(T[x].rs,T[y].rs,mid+,r);
PushUp(x);
return x;
}
inline void dfs(int x,int fa)
{
int i;
for(i=;i<E[x].size();i++)
{
int to=E[x][i]; if(to==fa) continue;
dfs(to,x); rt[x]=Merg(rt[x],rt[to],,m);
}
Ans[x]=T[rt[x]].mx;
}
int main()
{
// freopen("5457.in","r",stdin);
int i,x,y;
R(n); R(m);
for(i=;i<n;i++)
{
R(x); R(y); Link(x,y);
}
for(i=;i<=n;i++)
{
R(A[i]); R(B[i]); Insert(rt[i],,m,A[i],B[i]);
}
dfs(,);
for(i=;i<=n;i++) W(Ans[i].second),Wl(Ans[i].first);
return ;
}
/*
input
8 6
1 2
1 3
2 4
4 5
3 6
5 7
1 8
2 8
2 5
1 1
3 1
6 7
5 6
1 10
4 6
output
2 13
1 10
5 6
1 10
1 10
5 6
1 10
4 6
*/
bzoj5457的更多相关文章
- 2019.01.19 bzoj5457: 城市(线段树合并)
传送门 线段树合并菜题. 题意简述:给一棵树,每个节点有bib_ibi个aia_iai民族的人,问对于每棵子树,子树中哪个民族的人最多,有多少人. 思路: 直接上线段树合并,边合并边维护答案即可. ...
- bzoj5457 城市
一棵树,每个点有一个民族,和一个人数,求每个子树里最多的民族及其人数,如果一样,输出编号最小的 $n \leq 500000$ sol: 卡莫队的毒瘤题,需要 dsu on tree 大概就是 dfs ...
- [bzoj5457]城市_dsu on tree
bzoj 5457 城市 题目大意 给定一棵以\(1\)为根的\(n\)个节点的有根树. 每个节点有一个民族和该民族在当前节点的人数. 有\(n\)个询问,第\(i\)个询问是求以\(i\)为根的子树 ...
- 【BZOJ5457】城市(线段树合并)
点此看题面 大致题意: 一棵树上每个点有颜色\(a_i\)和权值\(b_i\),求以每个点为根的子树内权值和最大的颜色及其权值和. 线段树合并 这是一道线段树合并板子题. (关于线段树合并,可参考我的 ...
- dsu on tree(无讲解)
CF741D. Arpa's letter-marked tree and Mehrdad's Dokhtar-kosh paths 分析: 最多有一个字符出现奇数次 维护某个状态下深度的最大值,注意 ...
随机推荐
- Angular 表单验证类库 ngx-validator 1.0 正式发布
背景介绍 之前写了一篇 <如何优雅的使用 Angular 表单验证>,结尾处介绍了统一验证反馈的类库 ngx-validator ,由于这段时间一直在新模块做微前端以及相关业务组件库, ...
- LocalDate与Date转化
// 01. java.util.Date --> java.time.LocalDateTimepublic void UDateToLocalDateTime() { java.util.D ...
- 怎样获取页面中所有带href属性的标签集合
使用: document.links document.links instanceof HTMLCollection; 注意: 1. a 标签和 area 标签可以设置 href属性, 因此可以被获 ...
- vue采坑之——vue里面渲染html 并添加样式
在工作中,有次遇到要把返回的字符串分割成两部分,一部分用另外的样式显示. 这时候,我想通过对得到字符串进行处理,在需要特别样式的字符串片段用html标签(用的span)包裹起来再通过变量绑定就好了.不 ...
- ASP.NET Core 2.0 中读取 Request.Body 的正确姿势
原文:ASP.NET Core 中读取 Request.Body 的正确姿势 ASP.NET Core 中的 Request.Body 虽然是一个 Stream ,但它是一个与众不同的 Stream ...
- 微信公众号支付备忘及填坑之路-java
一.背景 最近公司给第三方开发了一个公众号,其中最重要的功能是支付,由于是第一次开发,遇到的坑特别的多,截止我写博客时,支付已经完成,在这里我把遇到的坑记录一下(不涉及退款).不得不吐槽一下,腾讯这么 ...
- ubuntu14 vim编译
(1) ./configure --prefix=/usr (2) make VIMRCLOC=/etc/vim VIMRUNTIMEDIR=/usr/share/vim/vim74 MAKE=&qu ...
- 【原创】编程基础之Jekins
Jenkins 2.164.2 官方:https://jenkins.io 一 简介 Build great things at any scale The leading open source a ...
- ThreeJS中创建文字的几种方法
1. DOM + CSS 传统html5的文字实现,用于添加描述性叠加文字的方法.一般使用绝对定位,并且保证z-index够大,用于显示在3D场景之上. 优点: 与CSS3D效果一致 缺点: 3d效果 ...
- ZPL语言完成条形码的打印
近期因为项目的需求,需要使用到打印机来打印业务相关的条形码和其他信息,由于之前有操作其它打印机的经验,Leader就安排我来做这个了(凑哦,这能说我是懵逼的么).于是就开始了我的探索之旅啦,不对,是踩 ...