[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
1 #include <set> 2 #include <cstdio> 3 #include <algorithm> 4 5 const int MAXE=2000010; 6 const int MAXV=1000010; 7 8 struct Edge{ 9 int from; 10 int to; 11 int dis; 12 Edge* next; 13 }; 14 Edge E[MAXE]; 15 Edge* head[MAXV]; 16 Edge* top=E; 17 18 int n; 19 int m; 20 int lg1; 21 int lg2; 22 int dis[MAXV]; 23 24 void Initialize(); 25 std::pair<int,int> DFS(int,int,int); 26 void DFSA(int,int,int); 27 void Insert(int,int,int); 28 int Sweep(); 29 30 int main(){ 31 Initialize(); 32 lg1=DFS(1,0,0).second; 33 lg2=DFS(lg1,0,0).second; 34 DFSA(lg1,0,0); 35 DFSA(lg2,0,0); 36 printf("%d\n",Sweep()); 37 // printf("%d %d\n",lg1,lg2); 38 return 0; 39 } 40 41 std::pair<int,int> DFS(int root,int prt,int dis){ 42 std::pair<int,int> ans(dis,root); 43 for(Edge* i=head[root];i!=NULL;i=i->next){ 44 if(i->to==prt) 45 continue; 46 ans=std::max(ans,DFS(i->to,root,dis+i->dis)); 47 } 48 return ans; 49 } 50 51 void DFSA(int root,int prt,int dis){ 52 ::dis[root]=std::max(::dis[root],dis); 53 for(Edge* i=head[root];i!=NULL;i=i->next){ 54 if(i->to==prt) 55 continue; 56 DFSA(i->to,root,dis+i->dis); 57 } 58 } 59 60 int Sweep(){ 61 int l=1,r=1,ans=0; 62 // std::priority_queue<int,std::vector<int>,std::less<int>> qmax; 63 // std::priority_queue<int,std::vector<int>,std::greater<int>> qmin; 64 std::multiset<int> s; 65 while(r<=n){ 66 // printf("%d\n",r); 67 s.insert(dis[r]); 68 while(*(--s.end())-*s.begin()>m){ 69 s.erase(s.find(dis[l])); 70 ++l; 71 } 72 ans=std::max(ans,int(s.size())); 73 ++r; 74 } 75 return ans; 76 } 77 78 void Initialize(){ 79 int a,b; 80 scanf("%d%d",&n,&m); 81 for(int i=2;i<=n;i++){ 82 scanf("%d%d",&a,&b); 83 Insert(a,i,b); 84 Insert(i,a,b); 85 } 86 } 87 88 inline void Insert(int from,int to,int dis){ 89 top->to=to; 90 top->dis=dis; 91 top->from=from; 92 top->next=head[from]; 93 head[from]=top; 94 top++; 95 }
Backup
以及图包时间
转载于:https://www.cnblogs.com/rvalue/p/7191518.html
[BZOJ 2500] 幸福的道路相关推荐
- bzoj2500幸福的道路 树形dp+单调队列
2500: 幸福的道路 Time Limit: 20 Sec Memory Limit: 256 MB Submit: 434 Solved: 170 [Submit][Status][Discu ...
- 【BZOJ2500】幸福的道路 树形DP+RMQ+双指针法
[BZOJ2500]幸福的道路 Description 小T与小L终于决定走在一起,他们不想浪费在一起的每一分每一秒,所以他们决定每天早上一同晨练来享受在一起的时光. 他们画出了晨练路线的草图,眼尖的 ...
- 解题报告 幸福的道路
1. 题目 幸福的道路(race) [问题描述] 小T与小L终于决定走在一起,他们不想浪费在一起的每一分每一秒,所以他们决定每天早上一同晨练来享受在一起的时光. 他们画出了晨练路线的草图 ...
- 【bzoj2500】幸福的道路 树形dp+倍增RMQ+二分
原文地址:http://www.cnblogs.com/GXZlegend/p/6825389.html 题目描述 小T与小L终于决定走在一起,他们不想浪费在一起的每一分每一秒,所以他们决定每天早上一 ...
- bzoj 3195 奇怪的道路
Written with StackEdit. Description 小宇从历史书上了解到一个古老的文明.这个文明在各个方面高度发达,交通方面也不例外.考古学家已经知道,这个文明在全盛时期有\(n\ ...
- [BZOJ 2200][Usaco2011 Jan]道路和航线 spfa+SLF优化
Description Farmer John正在一个新的销售区域对他的牛奶销售方案进行调查.他想把牛奶送到T个城镇 (1 <= T <= 25,000),编号为1T.这些城镇之间通过R条 ...
- 【bzoj 2435】[Noi2011]道路修建(dfs)
2435: [Noi2011]道路修建 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 3505 Solved: 1167 [Submit][Sta ...
- bzoj 2870 最长道路tree——边分治
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2870 关于边分治:https://www.cnblogs.com/Khada-Jhin/p/ ...
- bzoj 2870: 最长道路tree
orz n+e的题解 显然,将两棵树合并以后,新直径的两个端点一定在原来的两条直径的四个端点中. 画个图就知道了(我竟然没看出来QAQ 于是就可以从大到小枚举最小权,并查集合并了 时间复杂度\(O(n ...
最新文章
- C# CreateParams的使用(解决闪屏问题)
- Java异常ClassCastException
- Source Insight 4.0常用设置
- 太阳能板如何串联_太阳能的吸热板是什么
- mysql 自定义函数之判断
- 多mysql实例下开发需要注意主从同步延迟
- Go语言结构体的多字段赋值是并发安全的吗?
- 图片维度不匹配_内容审核基础:审核方式、流程与审核维度
- delphi连接sql server的字符串2011-10-11 16:07
- 计算机二级地15套题答案,计算机二级第15套答案解析.docx
- 邓元鋆:AMD的方法论
- 支付宝小程序设置服务器维护,支付宝小程序配置
- excel根据空格把数据分列
- 假设你有8个球,其中一个略微重一些,但是找出这个球的唯一方法是将两个球放在天平上对比。最少要称多少次才能找出这个较重的球?
- 【2022-05-31】JS逆向之易企秀
- AutoSar之微控制器抽象层MCAL
- 华为数据之道(3):面向业务的信息架构建设
- 电脑计算机u盘启动不了桌面图标,电脑开机后没有桌面图标
- HTTP_Wireshark
- 翻阅Windows SDK Samples
热门文章
- Sublime text 入门学习资源篇及其基本使用方法
- 充实你的素材库!10款免费的 PSD 素材下载
- 详解EBS接口开发之采购申请导入
- Oracle Stream配置详细步骤
- [转载]使用Vitamio打造自己的Android万能播放器(7)——在线播放(下载视频)...
- Java并发编程之ThreadGroup
- 《黑客秘笈——渗透测试实用指南》—第2章2.3节 外部或内部的主动式信息收集...
- 到底什么是API经济
- 图片延迟加载和滑动翻页
- 音视频多媒体协议相关资料汇总