bzoj 2500 幸福的道路 dfs 单调队列
来源:互联网 发布:网络创世纪uo 音乐 编辑:程序博客网 时间:2024/05/19 19:40
dfs维护一个每个点向下和向上的最长路。
开两个单调队列,单调递增和单调递减,找最后一个不满足条件的点。
注意队首留一个非法的点便于更新。
每次的决策点与之前的决策点取max。
#include <bits/stdc++.h>using namespace std;#define N 1100000#define ll long longint n,m,top,ans,pos;int fa[N],st[N],p1[N],p2[N];vector<int>vec[N],v[N];queue<int>que;int q1[N],q2[N],r1,r2,h1,h2;ll d1[N],d2[N],up[N],val[N],f[N];int main(){ //freopen("tt.in","r",stdin); scanf("%d%d",&n,&m); for(int i=2;i<=n;i++) { scanf("%d%lld",&fa[i],&val[i]); vec[fa[i]].push_back(i); v[fa[i]].push_back(val[i]); } que.push(1); while(!que.empty()) { int t=que.front();que.pop(); st[++top]=t; for(int i=0;i<vec[t].size();i++) que.push(vec[t][i]); } for(int now=top,x;now>=0;now--) { x=st[now]; for(int i=0,t;i<vec[x].size();i++) { t=vec[x][i]; if(d1[t]+v[x][i]>=d1[x]) { d2[x]=d1[x];p2[x]=p1[x]; d1[x]=d1[t]+v[x][i];p1[x]=t; } else if(d1[t]+v[x][i]>=d2[x]) d2[x]=d1[t]+v[x][i],p2[x]=t; } } for(int now=2,x;now<=top;now++) { x=st[now]; up[x]=up[fa[x]]+val[x]; if(p1[fa[x]]!=x) up[x]=max(up[x],d1[fa[x]]+val[x]); else up[x]=max(up[x],d2[fa[x]]+val[x]); } for(int i=1;i<=n;i++) f[i]=max(up[i],d1[i]); q1[r1=h1=1]=0;q2[r2=h2=1]=0; for(int i=1;i<=n;i++) { while(r1>h1&&f[i]-f[q1[h1+1]]>m)h1++; while(r2>h2&&f[q2[h2+1]]-f[i]>m)h2++; pos=max(pos,q1[h1]);pos=max(pos,q2[h2]); ans=max(ans,i-pos); while(r1>h1&&f[i]<=f[q1[r1]])r1--; while(r2>h2&&f[i]>=f[q2[r2]])r2--; q1[++r1]=i;q2[++r2]=i; } printf("%d\n",ans); return 0;}
0 0
- bzoj 2500 幸福的道路 dfs 单调队列
- BZOJ 2500 幸福的道路 树形DP+单调队列
- 幸福的道路(race) ssl 2570 bzoj 2500 单调队列
- [BZOJ 2500]幸福的道路 树形dp+单调队列+二分答案
- bzoj 2500: 幸福的道路 动态规划+单调栈
- bzoj 2500 幸福的道路 动态规划+单调栈
- 【bzoj2500】幸福的道路 单调队列+树形dp
- 【bzoj2500】【幸福的道路】【树形dp+单调队列】
- 幸福的道路_bzoj2500_树形dp+单调队列
- BSOJ3068 BZOJ2500 noip模拟赛 幸福的道路 树的最长链+单调队列 或 RMQ
- bzoj 2500 幸福的道路 树上直径+set
- 幸福的道路
- 幸福的道路(race)
- BZOJ 1047 单调队列
- BZOJ 4385 单调队列
- BZOJ 2096 单调队列
- bzoj 2227 单调队列
- bzoj 1047 单调队列
- 第15周 oj Problem L: 字符串替换(串)
- 斐波那契之兔子问题解释
- neo4j 下载地址 以及手册下载地址
- Leveldb 实现原理
- 畅通工程
- bzoj 2500 幸福的道路 dfs 单调队列
- oracle创建用户和表空间
- http缓存提高性能
- sicily Ordering Tasks 拓扑排序
- iOS - 指定按钮的点击范围
- Mybatis自动生成key值(selectKey和useGeneratedKeys)
- 漫步数学分析一——实数轴
- LINUX系统简单指令的介绍和使用(初学者)
- RFID技术