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发现可以用树来描绘这个草图. ...
随机推荐
- 3.12php
这是我的第一个博客 纪念一下 反正都是自己看 第一个问题 出现错误 当图片超过1M时就可能出现以下错误 当然这个也跟你php.ini设置有关 如果你php设置里 memory_limit 16M ...
- python装饰器总结
一.装饰器是什么 python的装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象.简单的说装饰器就是一个用来返回函数的函数 ...
- what is WLAN ? when and why we need use it ?
无线局域网络(Wireless Local Area Networks: WLAN)是相当便利的数据传输系统,它利用射频(Radio Frequency: RF)的技术,取代旧式碍手碍脚的双绞铜线(C ...
- ubuntu 下配置Python wxWidgets (复制自官方网站)
全系统英文官网操作地址:http://wxpython.org/download.php Ubuntu 英文操作地址:http://wiki.wxpython.org/InstallingOnUbun ...
- 关于 .net 开发 Office Word 的一些问题小结
1.在"组件服务"的DCom配置中找到Microsoft Office Word =>属性=>标识选项卡,然后选择交互式用户:::=>"安全" ...
- codeblocks常用快捷键
CodeBlocks常用操作快捷键编辑部分:Ctrl + A:全选Ctrl + C:复制Ctrl + X: 剪切Ctrl + V:粘贴Ctrl + Z:撤销Ctrl + S:保存Ctrl + Y / ...
- 实战开发中UI资源制作标准
资源制作标准设定建议 1.所有的UI资源全部采用PNG导出 因为Unity不支持外部压缩,所以,不论是用PNG还是JPG,只要尺寸相同,资源量在引擎中都会是一样大.所以,可以大胆地采用PNG进行输出, ...
- XSS前端防火墙
前一段时间,在EtherDream大神的博客里看到关于XSS防火墙的一系列文章,觉得很有意思.刚好科创要做一个防火墙,就把XSS前端防火墙作为一个创新点,着手去实现了. 在实现过程中,由于各种原因,比 ...
- dnf脚本的研究
[player number] 2 8 [pvp start area]0 0 0 00 0 0 00 0 0 0[dungeon]62[/dungeon][type] `[normal]`[gre ...
- 线形,柱形,条形数据表(百度Echart插件)
[获取资源]进入官网, http://echarts.baidu.com/导航,下载,下拉框下载,常用303k.就是这么简单,就个一个js.[项目使用]新建项目,MyChart具体使用的过程中, ...