endless(2018.10.25)
这题就是个线段树合并板子。
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int f[400001],n,m,pre[800001],cnt,rt[400001],ls[10000001],rs[10000001],nxt[800001],h[400001],a[400001],b[400001],id,sum[10000001],pw[10000001],ans[400001],ans1[400001];
void add(int x,int y)
{
pre[++cnt]=y;nxt[cnt]=h[x];h[x]=cnt;
pre[++cnt]=x;nxt[cnt]=h[y];h[y]=cnt;
}
void update(int x)
{
if(sum[ls[x]]>sum[rs[x]])sum[x]=sum[ls[x]],pw[x]=pw[ls[x]];
else if(sum[ls[x]]==sum[rs[x]])sum[x]=sum[ls[x]],pw[x]=min(pw[ls[x]],pw[rs[x]]);
else sum[x]=sum[rs[x]],pw[x]=pw[rs[x]];
}
void build(int &k,int l,int r,int v)
{
if(!k)k=++id;
if(l==r){sum[k]+=b[v];pw[k]=a[v];return ;}
int mid=(l+r)>>1;
if(a[v]<=mid)build(ls[k],l,mid,v);
else build(rs[k],mid+1,r,v);
update(k);
}
int merge(int x,int y,int l,int r)
{
if(!x||!y)return x+y;
if(l==r){sum[x]=sum[x]+sum[y];return x;}
ls[x]=merge(ls[x],ls[y],l,(l+r)>>1);
rs[x]=merge(rs[x],rs[y],((l+r)>>1)+1,r);
update(x);return x;
}
void dfs(int x,int fa)
{
for(int i=h[x];i;i=nxt[i])if(pre[i]!=fa)dfs(pre[i],x);
build(rt[x],1,m,x);
for(int i=h[x];i;i=nxt[i])if(pre[i]!=fa)rt[x]=merge(rt[x],rt[pre[i]],1,m);
ans[x]=sum[rt[x]];ans1[x]=pw[rt[x]];
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1,x,y;i<n;i++)scanf("%d%d",&x,&y),add(x,y);
for(int i=1;i<=n;i++)scanf("%d%d",&a[i],&b[i]);
dfs(1,0);for(int i=1;i<=n;i++)printf("%d %d\n",ans1[i],ans[i]);
}
endless(2018.10.25)的更多相关文章
- 2018.10.25 CCSP马拉松摸铜归来
24号体测跑50+1000米. 50米抢跑被罚重跑???然后老年人就只能吊着一口仙气跑第二次50米.然后跑1000米,然后再到宿舍收拾行李赶往地铁站,然后再冲到火车站...(卒) 宾馆,三人挤入二人房 ...
- 2018.10.25 bzoj4565: [Haoi2016]字符合并(区间dp+状压)
传送门 当看到那个k≤8k\le 8k≤8的时候就知道需要状压了. 状态定义:f[i][j][k]f[i][j][k]f[i][j][k]表示区间[i,j][i,j][i,j]处理完之后的状态为kkk ...
- 课堂笔记及知识点----UI框架简介(2018/10/25)
UI框架学习目标: 要知道怎样套用的! 框架里面的基本执行流程 怎样开始执行(配置文件) 怎么套用 最主要的三个脚本: (也是多态的体现之一) 1).BaseUI: 作用-->提供UI能够使用的 ...
- 2018.10.25 bzo1227: [SDOI2009]虔诚的墓主人(组合数学+扫描线+bit)
传送门 有点难调啊.其实是我自己sb了 不过交上去1A1A1A还是平衡了一下心态. 所以这道题怎么做呢? 我们考虑对于一个点(x,y)(x,y)(x,y)如果这个点成为中心,正左/右/上/下分别有l/ ...
- 2018.10.25 洛谷P4187 [USACO18JAN]Stamp Painting(计数dp)
传送门 其实本来想做组合数学的2333. 谁知道是道dpdpdp. 唉只能顺手做了 还是用真难则反的思想. 这题我们倒着考虑,只需要求出不合法方案数就行了. 这个显然是随便dpdpdp的. f[i]f ...
- 2018.10.25 bzoj4517: [Sdoi2016]排列计数(组合数学)
传送门 组合数学简单题. Ans=(nm)∗1Ans=\binom {n} {m}*1Ans=(mn)∗1~(n−m)(n-m)(n−m)的错排数. 前面的直接线性筛逆元求. 后面的错排数递推式本蒟 ...
- 2018.10.25 uoj#308. 【UNR #2】UOJ拯救计划(排列组合)
传送门 有一个显然的式子:Ans=∑A(n,i)∗用i种颜色的方案数Ans=\sum A(n,i)*用i种颜色的方案数Ans=∑A(n,i)∗用i种颜色的方案数 这个东西貌似是个NPCNPCNPC. ...
- 2018.10.25 atcoder Leftmost Ball(计数dp+组合数学)
传送门 dp妙题啊. 我认为DZYODZYODZYO已经说的很好了. 强制规定球的排序方式. 然后就变成了一个求拓扑序数量的问题. 代码: #include<bits/stdc++.h> ...
- 2018.10.25 uestc上天的卿学姐(计数dp)
传送门 看了DZYODZYODZYO的题解之后发现自己又sbsbsb了啊. 直接dpdpdp是O(2d)O(2^d)O(2d)更新,O(1)O(1)O(1)查询或者O(1)O(1)O(1)更新,O(2 ...
随机推荐
- 为编译器的实现者提供一个精确的定义:ANSI C
编译器的实现 常用C++编译器推荐_w3cschool https://www.w3cschool.cn/cpp/cpp-zxm72ps8.html 常用C++编译器推荐 由 Alma 创建, 最后一 ...
- C++继承类同名数据成员被隐藏,其实都在内存里,转换后都可以被使用
#include "stdafx.h" class A { public: int i; A() { i=; } }; class B: public A { public: in ...
- s:text
<s:text>是Struts2用来显示资源文件中信息或格式化数据时使用的,一般要配合<s:i18n>标签.
- Alsa中PCM参数设置⭐⭐
1) PCM设备的句柄.2) 指定同时可供回放或截获的PCM流的方向3) 提供一些关于我们想要使用的设置选项的信息,比如缓冲区大小,采样率,PCM数据格式等4) 检查硬件是否支持设置选项. 4.1 ...
- java中的break与continue
1.两者的作用 break:是跳出当前的循环块或者程序块.循环块有for.do while.while,程序块有switch(){case 1: xxx;break;}在循环体中的作用是跳出正在循环的 ...
- zk使用通知移除节点
前面:https://www.cnblogs.com/toov5/p/9899238.html 服务发生宕机 咋办? 发个事件通知,告知大家哟, 会有通知事件哦 看项目: 服务端: package c ...
- html5--4-1 video/视频播放
html5--4-1 video/视频播放 学习要点 掌握video元素的基本用法 直到现在,在网页中的大多数视频是通过插件(比如 Flash)来显示的.然而,并非所有浏览器都拥有同样的插件. HTM ...
- ORA-32001:write to SPFILE requested but no SPFILE is in use
oracle报错: ORA-32001:write to SPFILE requested but no SPFILE is in use 解决方法: 1.查看是否有spfile sql> sh ...
- C++之面向对象初探----对象管理模型(关键是this指针)
前言 c++对象模型可以概括为以下2部分 1.语言中直接支持面向对象程序员设计部分,主要涉及如构造函数.析构函数.虚函数.继承(单继承.多继承.虚继承).多态等待. 2.对于各种支持的底层实现机制 在 ...
- bzoj 1098 [POI2007]办公楼biu——链表
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1098 求补图的连通块大小.与自己没有边的和自己在一个连通块里. 用链表把所有点串起来.先给自 ...