P3066 [USACO12DEC] 逃跑的Barn 左偏树
P3066 逃跑的Barn 左偏树
题意:给出以1号点为根的一棵有根树,问每个点的子树中与它距离小于等于l的点有多少个。
注意到答案的两个性质:
- 一个点的所有答案一定包含在其所有儿子的答案中
- 如果节点\(i\)当前满足条件,那么所有距离(相对于根节点)比它小的节点当前也都满足(所以建个大根堆)
所以考虑使用左偏树,每个节点都建个大根堆,在\(dfs\)时计算出所有点深度,再利用这些性质回溯时依次合并所有堆,显然答案即为堆的大小。
注意long long卡了我好久
#include <cstdio>
#include <algorithm>
#define MAXN 200002
#define LL long long
using namespace std;
int n;long long l;
int head[MAXN],nxt[MAXN*2],vv[MAXN*2],tot;
LL ww[MAXN*2];
inline void add_edge(int u, int v, LL w){
ww[++tot]=w;
vv[tot]=v;
nxt[tot]=head[u];
head[u]=tot;
}
LL val[MAXN];
int root[MAXN],sz[MAXN],sl[MAXN],sr[MAXN],dis[MAXN];
int merge(int a, int b){
if(a==0||b==0) return a+b;
if(val[a]<val[b]) swap(a,b);
sr[a]=merge(sr[a], b);
if(dis[sl[a]]<dis[sr[a]]) swap(sl[a], sr[a]);
dis[a]=dis[sr[a]]+1;
return a;
}
void dfs(int u, LL wnow){
root[u]=u;
val[u]=wnow;
sz[u]=1;
for(int i=head[u];i;i=nxt[i]){
int v=vv[i];
LL w=ww[i];
dfs(v, wnow+w);
root[u]=merge(root[u], root[v]);
sz[u]+=sz[v];
while(val[root[u]]-val[u]>l){
root[u]=merge(sl[root[u]], sr[root[u]]);
sz[u]--;
}
}
}
int main()
{
scanf("%d %lld", &n, &l);
for(int i=2;i<=n;++i){
int fa;LL w;
scanf("%d %lld", &fa, &w);
add_edge(fa,i,w);
}
dfs(1,0);
for(int i=1;i<=n;++i)
printf("%d\n", sz[i]);
return 0;
}
P3066 [USACO12DEC] 逃跑的Barn 左偏树的更多相关文章
- 洛谷P3066 [USACO12DEC] 逃跑的Barn [左偏树]
题目传送门 逃跑的Barn 题目描述 It's milking time at Farmer John's farm, but the cows have all run away! Farmer J ...
- bzoj3011 [Usaco2012 Dec]Running Away From the Barn 左偏树
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=3011 题解 复习一下左偏树板子. 看完题目就知道是左偏树了. 结果这个板子还调了好久. 大概已 ...
- 洛谷P3066 [USACO12DEC]逃跑的Barn (线段树合并)
题目描述It's milking time at Farmer John's farm, but the cows have all run away! Farmer John needs to ro ...
- USACO Running Away From the Barn /// 可并堆 左偏树维护大顶堆
题目大意: 给出以1号点为根的一棵有根树,问每个点的子树中与它距离小于等于m的点有多少个 左偏树 https://blog.csdn.net/pengwill97/article/details/82 ...
- 数据结构(左偏树,可并堆):BNUOJ 3943 Safe Travel
Safe Travel Time Limit: 3000ms Memory Limit: 65536KB 64-bit integer IO format: %lld Java class ...
- BZOJ 1455 罗马游戏 ——左偏树
[题目分析] 左偏树的模板题目,大概就是尽量维护树的深度保持平衡,以及尽可能的快速合并的一种堆. 感觉和启发式合并基本相同. 其实并没有快很多. 本人的左偏树代码自带大常数,借鉴请慎重 [代码] #i ...
- 【BZOJ-1455】罗马游戏 可并堆 (左偏树)
1455: 罗马游戏 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1355 Solved: 561[Submit][Status][Discuss] ...
- 【bzoj2809】[Apio2012]dispatching 左偏树
2016-05-31 15:56:57 题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2809 直观的思想是当领导力确定时,尽量选择薪水少的- ...
- zoj 2334 Monkey King/左偏树+并查集
原题链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1389 大致题意:N只相互不认识的猴子(每只猴子有一个战斗力值) 两只 ...
随机推荐
- Python+VSCode+Git【转】
Python+VSCode+Git 学习总结 - 秦无邪 - 博客园
- Scratch编程:游泳的火柴人(四)
“ 上节课的内容全部掌握了吗?反复练习了没有,编程最好的学习方法就是练习.练习.再练习.一定要记得多动手.多动脑筋哦~~” 01 — 游戏介绍 这是一款简单的小游戏,实现了一个手绘的火柴人在水里游泳. ...
- Jmeter之分布式测试/压测
Jmeter做分布式测试的原因: 测试机器的配置低,对服务器进行压测时,造成不了压力. jmeter并发10000后,测试机就已经卡顿了,而且测试结果有大量失败(忽略了jmeter自身问题=.=||| ...
- Linux Nginx的权限——访问本地目录报错403
在安装好FastDFS并成功上传图片文件后,根据FastDFS返回的文件地址无法通过HTTP(即浏览器)访问到,报错404或者403. 不管是Error 404还是Error 403,基本都是Ngin ...
- 初试牛刀:实时天气WebService
1.引入WebService:http://www.webxml.com.cn/WebServices/WeatherWebService.asmx 2.声明接口→界面获取值传入接口→接口返回值处理→ ...
- 音视频入门-08-RGB&YUV
* 音视频入门文章目录 * YUV & RGB 相互转换公式 YCbCr 的 Y 与 YUV 中的 Y 含义一致,Cb 和 Cr 与 UV 同样都指色彩,Cb 指蓝色色度,Cr 指红色色度,在 ...
- Centos7+puppet+foreman,实现部署OS
一.简介 1. 需要实现操作系统的部署 foreman提供了一个基于kickstart的部署工具,输入一台服务器的部署网卡的mac地址和hostname.ip等信息,就能自动的帮我们部署完,并且,还可 ...
- iOS - OC 使用运行时来获取并修改类
前言: Objective C的runtime技术功能非常强大,能够在运行时获取并修改类的各种信息,包括获取方法列表.属性列表.变量列表,修改方法.属性,增加方法,属性等等,本文对相 ...
- iOS - 回顾总结Runtime原理及使用
runtime简介 因为Objc是一门动态语言,所以它总是想办法把一些决定工作从编译连接推迟到运行时.也就是说只有编译器是不够的,还需要一个运行时系统 (runtime system) 来执行编译后的 ...
- Qt定时器
PS: 本案例使用的是Qt 4.8.4版本,不同版本代码可能会有差异. 第一步: // 重写此虚函数(继承自QObject) virtual void timerEvent(QTimerEvent* ...