[BZOJ 2500] 幸福的道路
照例先贴题面(汪汪汪)
2500: 幸福的道路
Time Limit: 20 Sec Memory Limit: 256 MB
Submit: 368 Solved: 145
[Submit][Status][Discuss]Description
小T与小L终于决定走在一起,他们不想浪费在一起的每一分每一秒,所以他们决定每天早上一同晨练来享受在一起的时光.他们画出了晨练路线的草图,眼尖的小T发现可以用树来描绘这个草图.他们不愿枯燥的每天从同一个地方开始他们的锻炼,所以他们准备给起点标号后顺序地从每个起点开始(第一天从起点一开始,第二天从起点二开始……). 而且他们给每条道路定上一个幸福的值.很显然他们每次出发都想走幸福值和最长的路线(即从起点到树上的某一点路径中最长的一条).他们不愿再经历之前的大起大落,所以决定连续几天的幸福值波动不能超过M(即一段连续的区间并且区间的最大值最小值之差不超过M).他们想知道要是这样的话他们最多能连续锻炼多少天(hint:不一定从第一天一直开始连续锻炼)?现在,他们把这个艰巨的任务交给你了!Input
第一行包含两个整数N, M(M<=10^9).第二至第N行,每行两个数字Fi , Di, 第i行表示第i个节点的父亲是Fi,且道路的幸福值是Di.Output
最长的连续锻炼天数Sample Input
3 2
1 1
1 3Sample Output
3
数据范围:
50%的数据N<=1000
80%的数据N<=100 000
100%的数据N<=1000 000
#include <set>
#include <cstdio>
#include <algorithm> const int MAXE=;
const int MAXV=; struct Edge{
int from;
int to;
int dis;
Edge* next;
};
Edge E[MAXE];
Edge* head[MAXV];
Edge* top=E; int n;
int m;
int lg1;
int lg2;
int dis[MAXV]; void Initialize();
std::pair<int,int> DFS(int,int,int);
void DFSA(int,int,int);
void Insert(int,int,int);
int Sweep(); int main(){
Initialize();
lg1=DFS(,,).second;
lg2=DFS(lg1,,).second;
DFSA(lg1,,);
DFSA(lg2,,);
printf("%d\n",Sweep());
// printf("%d %d\n",lg1,lg2);
return ;
} std::pair<int,int> DFS(int root,int prt,int dis){
std::pair<int,int> ans(dis,root);
for(Edge* i=head[root];i!=NULL;i=i->next){
if(i->to==prt)
continue;
ans=std::max(ans,DFS(i->to,root,dis+i->dis));
}
return ans;
} void DFSA(int root,int prt,int dis){
::dis[root]=std::max(::dis[root],dis);
for(Edge* i=head[root];i!=NULL;i=i->next){
if(i->to==prt)
continue;
DFSA(i->to,root,dis+i->dis);
}
} int Sweep(){
int l=,r=,ans=;
// std::priority_queue<int,std::vector<int>,std::less<int>> qmax;
// std::priority_queue<int,std::vector<int>,std::greater<int>> qmin;
std::multiset<int> s;
while(r<=n){
// printf("%d\n",r);
s.insert(dis[r]);
while(*(--s.end())-*s.begin()>m){
s.erase(s.find(dis[l]));
++l;
}
ans=std::max(ans,int(s.size()));
++r;
}
return ans;
} void Initialize(){
int a,b;
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++){
scanf("%d%d",&a,&b);
Insert(a,i,b);
Insert(i,a,b);
}
} inline void Insert(int from,int to,int dis){
top->to=to;
top->dis=dis;
top->from=from;
top->next=head[from];
head[from]=top;
top++;
}
Backup
以及图包时间

[BZOJ 2500] 幸福的道路的更多相关文章
- [BZOJ 2500]幸福的道路 树形dp+单调队列+二分答案
考试的时候打了个树链剖分,而且还审错题了,以为是每天找所有点的最长路,原来是每天起点的树上最长路径再搞事情.. 先用dfs处理出来每个节点以他为根的子树的最长链和次长链.(后面会用到) 然后用类似dp ...
- ●BZOJ 2500 幸福的道路
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=2500 题解: DFS,单调队列 首先有一个结论,距离树上某一个点最远的点一定是树的直径的一个 ...
- bzoj 2500 幸福的道路 树上直径+set
首先明确:树上任意一点的最长路径一定是直径的某一端点. 所以先找出直径,求出最长路径,然后再求波动值<=m的最长区间 #include<cstdio> #include<cst ...
- BZOJ 2500 幸福的道路(race) 树上直径+平衡树
structHeal { priority_queue<int> real; priority_queue<int> stack; void push(int x){ real ...
- 【BZOJ】【2500】幸福的道路
树形DP+单调队列优化DP 好题(也是神题……玛雅我实在是太弱了TAT,真是一个250) 完全是抄的zyf的……orz我还是退OI保平安吧 第一步对于每一天求出一个从第 i 个点出发走出去的最长链的长 ...
- BZOJ2500: 幸福的道路
题解: 一道不错的题目. 树DP可以求出从每个点出发的最长链,复杂度O(n) 然后就变成找一个数列里最长的连续区间使得最大值-最小值<=m了. 成了这题:http://www.cnblogs.c ...
- bzoj2500幸福的道路 树形dp+单调队列
2500: 幸福的道路 Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 434 Solved: 170[Submit][Status][Discuss ...
- [Bzoj2500]幸福的道路(树上最远点)
2500: 幸福的道路 Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 474 Solved: 194[Submit][Status][Discuss ...
- 【BZOJ2500】幸福的道路 树形DP+RMQ+双指针法
[BZOJ2500]幸福的道路 Description 小T与小L终于决定走在一起,他们不想浪费在一起的每一分每一秒,所以他们决定每天早上一同晨练来享受在一起的时光. 他们画出了晨练路线的草图,眼尖的 ...
随机推荐
- Hadoop 2.7 伪分布式环境搭建
1.安装环境 ①.一台Linux CentOS6.7 系统 hostname ipaddress subnet mask ...
- python基础之数据类型/字符串/元组/列表/字典
Python 数据类型 数字类型: int整型,long 长整型(在python3.0里不区分整型和长整型).float浮点型:complex复数(python中存在小数字池:-5--257):布尔值 ...
- Go - method
hello, 大家好,由于之前工作上面的事情较多,所以关于go语言的学习就暂时“搁浅了”...不过从今天开始,我们又将回到了go语言的学习过程之中. 当然,我们学习go的"初心"是 ...
- Javascript实现Base64解码
工作中需要用到,在stackoverflow中找到的,实践证明可用. function decode_base64(s) { var e = {}, i, k, v = [], r = '', w = ...
- 一篇文章带你快速入门createjs
开始用createjs这个框架的时候,发现网上的相关教程还是挺少的,所以写一篇文章,方便日后查看. createjs简介 官网:http://www.createjs.cc/ createjs中包 ...
- docker--数据卷与数据卷容器
docker--数据卷与数据卷容器 1.数据卷: 创建一个volumes的文件夹: [root@docker01 /]# mkdir volumes [root@docker01 /]# ls bin ...
- 15套java架构师、集群、高可用、高可扩 展、高性能、高并发、性能优化Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分布式项目实战视频教程
* { font-family: "Microsoft YaHei" !important } h1 { color: #FF0 } 15套java架构师.集群.高可用.高可扩 展 ...
- [leetcode-611-Valid Triangle Number]
Given an array consists of non-negative integers, your task is to count the number of triplets chose ...
- Redis初体验
简介 Redis是一个速度非常快的非关系型数据库,它不仅性能强劲,而且还具有复制特性以及为解决问题而生的独一无二的数据模型.作为键值型数据库,Redis支持5中数据类型:字符串,列表,集 ...
- mysql启动关闭的批处理,感觉很好用在其他论坛帖子上找到的,感谢分享
最近用mysql的时间比较多,每次都在计算机管理工具下面去启动,感觉很麻烦,于是搜索了下果然有前辈已经做出了这些东西,今天收藏整理,mysql启动关闭的批处理感觉很好用在其他论坛帖子上找到的,感谢互联 ...