[Bzoj2500]幸福的道路(树上最远点)
2500: 幸福的道路
Time Limit: 20 Sec Memory Limit: 256 MB
Submit: 474 Solved: 194
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
Sample Output
数据范围:
50%的数据N<=1000
80%的数据N<=100 000
100%的数据N<=1000 000
HINT
分析:
比较容易分析的题目。
求每个点的树上最远距离
后面的处理连续天数因为具有传递性是O(n)的。
用优先队列模拟出multiset,总复杂度O(nlogn)
AC代码:
- # include <iostream>
- # include <cstdio>
- # include <queue>
- using namespace std;
- typedef long long LL;
- const int N = 1e6 + ;
- int head[N],dt,n,mn[N],Log[];LL m,f1[N],f2[N],g[N];
- struct Edge{
- int to,nex;LL w;
- }edge[N];
- struct Heap{
- priority_queue<LL> A,B;
- void insert(LL x){A.push(x);}
- void erase(LL x){B.push(x);}
- void pop(){while(!B.empty() && A.top() == B.top())A.pop(),B.pop();}
- LL top(){pop();return A.top();}
- int size(){return A.size() - B.size();}
- }A,B;
- void AddEdge(int u,int v,LL w)
- {
- edge[++dt] = (Edge){v,head[u],w};
- head[u] = dt;
- }
- void dfs(int u)
- {
- f1[u] = f2[u] = ;
- for(int i = head[u];i;i = edge[i].nex)
- {
- dfs(edge[i].to);
- LL tmp = f1[edge[i].to] + edge[i].w;
- if(tmp >= f1[u])
- {
- f2[u] = f1[u];
- f1[u] = tmp;
- }
- else f2[u] = max(f2[u],tmp);
- }
- }
- void Dfs(int u)
- {
- for(int i = head[u];i;i = edge[i].nex)
- {
- if(f1[u] == f1[edge[i].to] + edge[i].w)
- g[edge[i].to] = max(f2[u],g[u]) + edge[i].w;
- else g[edge[i].to] = max(f1[u],g[u]) + edge[i].w;
- Dfs(edge[i].to);
- }
- }
- int main()
- {
- scanf("%d %lld",&n,&m);int x;LL y;
- for(int i = ;i <= n;i++)scanf("%d %lld",&x,&y),AddEdge(x,i,y);
- dfs();Dfs();
- for(int i = ;i <= n;i++)g[i] = max(g[i],f1[i]);
- A.insert(g[]);B.insert(-g[]);int r = ,ans = ;
- for(int i = ;i <= n;i++)
- {
- LL mi = r == i ? g[i] : -B.top(),mx = r == i ? g[i] : A.top();
- while(r <= n)
- {
- mx = max(mx,g[r]);
- mi = min(mi,g[r]);
- if(mx - mi <= m)A.insert(g[r]),B.insert(-g[r]),r++;
- else break;
- }
- A.erase(g[i]);B.erase(-g[i]);
- ans = max(ans,r - i);
- }
- printf("%d\n",ans);
- }
[Bzoj2500]幸福的道路(树上最远点)的更多相关文章
- 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: 幸福的道路(树形dp+单调队列)
好题.. 先找出每个节点的树上最长路 由树形DP完成 节点x,设其最长路的子节点为y 对于y的最长路,有向上和向下两种情况: down:y向子节点的最长路g[y][0] up:x的次长路的g[x][1 ...
- bzoj 2500 幸福的道路 树上直径+set
首先明确:树上任意一点的最长路径一定是直径的某一端点. 所以先找出直径,求出最长路径,然后再求波动值<=m的最长区间 #include<cstdio> #include<cst ...
- 【BZOJ2500】幸福的道路 树形DP+RMQ+双指针法
[BZOJ2500]幸福的道路 Description 小T与小L终于决定走在一起,他们不想浪费在一起的每一分每一秒,所以他们决定每天早上一同晨练来享受在一起的时光. 他们画出了晨练路线的草图,眼尖的 ...
- 【BZOJ】【2500】幸福的道路
树形DP+单调队列优化DP 好题(也是神题……玛雅我实在是太弱了TAT,真是一个250) 完全是抄的zyf的……orz我还是退OI保平安吧 第一步对于每一天求出一个从第 i 个点出发走出去的最长链的长 ...
- [BZOJ 2500] 幸福的道路
照例先贴题面(汪汪汪) 2500: 幸福的道路 Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 368 Solved: 145[Submit][Sta ...
- csu 1798(树上最远点对,线段树+lca)
1798: 小Z的城市 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 60 Solved: 16[Submit][Status][Web Board] ...
- 【bzoj2500】幸福的道路 树形dp+单调队列
Description 小T与小L终于决定走在一起,他们不想浪费在一起的每一分每一秒,所以他们决定每天早上一同晨练来享受在一起的时光. 他们画出了晨练路线的草图,眼尖的小T发现可以用树来描绘这个草图. ...
随机推荐
- laravel如何查找门脸及注入类方法
门脸模式 通过 config/app.php 查看别名对应类名 Illuminate\Support\Facades\Log ,查看 LoggerInterface 类文件,得:命名空间+接口名 Ps ...
- 【HEVC帧间预测论文】P1.1 基于运动特征的HEVC快速帧间预测算法
基于运动特征的 HEVC 快速帧间预测算法/Fast Inter-Frame Prediction Algorithm for HEVC Based on Motion Features <HE ...
- 基于 python 的接口测试框架
项目背景 公司内部的软件采用B/S架构,管理实验室数据,实现数据的存储和分析统计.大部分是数据的增删改查,由于还在开发阶段,所以UI界面的变化非常快,之前尝试过用python+selenium进行UI ...
- 如何用Chrome自带的截屏功能截取超过一个屏幕的网页
提升程序员工作效率的工具/技巧推荐系列 推荐一个功能强大的文件搜索工具SearchMyFiles 介绍一个好用的免费流程图和UML绘制软件-Diagram Designer 介绍Windows任务管理 ...
- javaee 第四周作业
分析hello.java.下载链接:https://github.com/javaee/tutorial-examples/tree/master/web/jsf/hello1 /** * Copyr ...
- JQQ文字素材
1.十二生肖:子鼠.丑牛.寅虎.卯兔.辰龙.巳舍.午马.未羊.申猴.酉鸡.戌狗.亥猪.丙申年(2016)乙未年(2015)甲午年(2014)癸巳年(2013)壬辰年(2012)辛卯年(2011)庚寅年 ...
- execve - 执行程序
总览 (SYNOPSIS) #include <unistd.h> int execve (const char *filename, char *const argv [], char ...
- flask学习规划
实现基本登录注册: 留言板功能: 并且部署到服务器: 预计完成时间6.16:. 后续页面美化: 各种其他功能的探索一个月时间: 并行地学习python,java,css,html,js,sql 暑假预 ...
- nvm、npm、nodejs的关系(转载)
nvm.npm.nodejs的关系 为什么要了解nvm.npm.nodejs的关系: reactNative的项目构建都是有这几个工具进行构建管理. 掌握他们的关系,就能了解reactNative项目 ...
- matlab 随笔
<<matlab高级编程技巧与应用:45个案例分析>> 一. 重新认识向量化编程 1.向量化编程与循环的比较 2.预分配内存更好 3.matlab中是列优先 4.归一化 数据归 ...