BZOJ2500: 幸福的道路
题解:
一道不错的题目。
树DP可以求出从每个点出发的最长链,复杂度O(n)
然后就变成找一个数列里最长的连续区间使得最大值-最小值<=m了。
成了这题:http://www.cnblogs.com/zyfzyf/p/4008295.html
代码:
#include<cstdio> #include<cstdlib> #include<cmath> #include<cstring> #include<algorithm> #include<iostream> #include<vector> #include<map> #include<set> #include<queue> #include<string> #define inf 1000000000 #define maxn 1000000+5 #define maxm 20000000+5 #define eps 1e-10 #define ll long long #define pa pair<int,int> #define for0(i,n) for(int i=0;i<=(n);i++) #define for1(i,n) for(int i=1;i<=(n);i++) #define for2(i,x,y) for(int i=(x);i<=(y);i++) #define for3(i,x,y) for(int i=(x);i>=(y);i--)
#define for4(i,x) for(int i=head[x],y;i;i=e[i].next) #define mod 1000000007 using namespace std; inline int read() { int x=,f=;char ch=getchar(); while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();} while(ch>=''&&ch<=''){x=*x+ch-'';ch=getchar();} return x*f; }
struct edge{int go,next;ll w;}e[*maxn];
int n,tot,q[maxn][],l[],r[],head[maxn];
ll m,f[maxn],g[maxn][],a[maxn];
inline void insert(int x,int y,ll z)
{
e[++tot]=(edge){y,head[x],z};head[x]=tot;
}
inline void down(int x)
{
for4(i,x)
{
down(y=e[i].go);
if(g[y][]+e[i].w>g[x][])g[x][]=g[x][],g[x][]=g[y][]+e[i].w;
else g[x][]=max(g[x][],g[y][]+e[i].w);
}
}
inline void up(int x)
{
for4(i,x)
{
f[y=e[i].go]=f[x]+e[i].w;
if(g[y][]+e[i].w==g[x][])f[y]=max(f[y],g[x][]+e[i].w);
else f[y]=max(f[y],g[x][]+e[i].w);
up(y);
}
} int main() { freopen("input.txt","r",stdin); freopen("output.txt","w",stdout); n=read();m=read();
for2(i,,n){int x=read(),y=read();insert(x,i,y);}
down();up();
for1(i,n)a[i]=max(f[i],g[i][]);
l[]=l[]=;r[]=r[]=;
int ret=,ans=;
for1(i,n)
{
while(l[]<=r[]&&a[i]<=a[q[r[]][]])r[]--;
q[++r[]][]=i;
while(l[]<=r[]&&a[i]>=a[q[r[]][]])r[]--;
q[++r[]][]=i;
while(a[q[l[]][]]-a[q[l[]][]]>m)
ret=q[l[]][]<q[l[]][]?q[l[]++][]+:q[l[]++][]+;
ans=max(ans,i-ret+);
}
cout<<ans<<endl; return ; }
2500: 幸福的道路
Time Limit: 20 Sec Memory Limit: 256 MB
Submit: 113 Solved: 49
[Submit][Status]
Description
后顺序地从每个起点开始(第一天从起点一开始,第二天从起点二开始……).
而且他们给每条道路定上一个幸福的值.很显然他们每次出发都想走幸福值和最长的路线(即从起点到树上的某一点路径中最长的一条).
Input
Output
Sample Input
1 1
1 3
Sample Output
数据范围:
50%的数据N<=1000
80%的数据N<=100 000
100%的数据N<=1000 000
BZOJ2500: 幸福的道路的更多相关文章
- 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+单调队列)
好题.. 先找出每个节点的树上最长路 由树形DP完成 节点x,设其最长路的子节点为y 对于y的最长路,有向上和向下两种情况: down:y向子节点的最长路g[y][0] up:x的次长路的g[x][1 ...
- 【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 ...
- 【bzoj2500】幸福的道路 树形dp+单调队列
Description 小T与小L终于决定走在一起,他们不想浪费在一起的每一分每一秒,所以他们决定每天早上一同晨练来享受在一起的时光. 他们画出了晨练路线的草图,眼尖的小T发现可以用树来描绘这个草图. ...
- 【bzoj2500】幸福的道路 树形dp+倍增RMQ+二分
原文地址:http://www.cnblogs.com/GXZlegend/p/6825389.html 题目描述 小T与小L终于决定走在一起,他们不想浪费在一起的每一分每一秒,所以他们决定每天早上一 ...
- (noip模拟二十一)【BZOJ2500】幸福的道路-树形DP+单调队列
Description 小T与小L终于决定走在一起,他们不想浪费在一起的每一分每一秒,所以他们决定每天早上一同晨练来享受在一起的时光. 他们画出了晨练路线的草图,眼尖的小T发现可以用树来描绘这个草图. ...
随机推荐
- cxgrid GridMode 等于 True 时的一些问题。
When using grid mode, the data controller loads a fixed number of dataset records into memory. The n ...
- Spark机器学习 Day2 快速理解机器学习
Spark机器学习 Day2 快速理解机器学习 有两个问题: 机器学习到底是什么. 大数据机器学习到底是什么. 机器学习到底是什么 人正常思维的过程是根据历史经验得出一定的规律,然后在当前情况下根据这 ...
- 怎样下载安装Firebug和使用Firebug
Firebug是基于火狐(FireFox)浏览器的一个插件,它的作用是给Web页面开发者一个很好的测试前端页面代码的工具.所以深受网页开发者或网页布局爱好者的喜爱.像我们用DIV+CSS和html所写 ...
- 生成XML文件,通过实体生成XML文件
实体 using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Xm ...
- CodeForces 492B
Description Vanya walks late at night along a straight street of length l, lit by n lanterns. Consid ...
- 利用PHPRPC以及SOAP分别实现PHP的Webserver功能
服务端:phprpc服务端 <?php /* phprpc 服务端演示 * time:2014-06-23 */ require_once 'phprpc_server.php';//引入服务端 ...
- 编辑器&IDE中适合程序员的字体
adobe的免费字体 source Code Pro
- 在cmd命令行下登录本地oracle数据库与服务器上的oracle
一.本地登录 cmd->sqlplus 用户名/密码@数据库名 (as sysdba)->enter注:如果此用户名不是系统用户sys,scott,system就不需要加as sysdba ...
- php如何查找会员无限分类的所有上级和所有下级
a推广出的a-1,a-2继续推广,得到a-1-1,a-1-2等等数据库设计思路如下:用户表中有一个son这么一个字段,这个字段中存放名下所有会员的id,用分号隔开.这个字段的维护:比如a-1-1推广出 ...
- [转载]C#缓存absoluteExpiration、slidingExpiration两个参数的疑惑
看了很多资料终于搞明白cache中absoluteExpiration,slidingExpiration这两个参数的含义. absoluteExpiration:用于设置绝对过期时间,它表示只要时间 ...