[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发现可以用树来描绘这个草图. ...
随机推荐
- (转)Spring管理的Bean的生命周期
http://blog.csdn.net/yerenyuan_pku/article/details/52834011 bean的初始化时机 前面讲解了Spring容器管理的bean的作用域.接着我们 ...
- TCP和流
http://www.cnblogs.com/lwzz/archive/2011/07/03/2096963.html TCP是一种流协议(stream protocol).这就意味着数据是以字节流的 ...
- window Chrome 下允许跨域访问服务端接口设置
关闭chrome,使用cmd命令进入chrome安装目录cd C:\Program Files (x86)\Google\Chrome\Application 然后使用命令打开chromechrome ...
- iview modal 点击打开窗口,打开前先销毁里面的内容再打开
<Modal v-model="addSubOrgModal" @on-cancel="addSubOrgCancel" @on-visible-chan ...
- CreateProcess Access violation(越界访问)
https://stackoverflow.com/questions/11339186/createprocess-fails-with-an-access-violation My aim is ...
- 点击按钮打开一个新的窗口 关键词(Intent, setData , putExtra , startActivity |Bundle)
M3U8_Video_demo 项目 //------------------ 创建发送private void playVideo(String source, String title) { if ...
- 框模型中设置内容区域元素占地尺寸box-sizing属性
盒子模型有两种 一种是 内容盒子模型(content-box)一种是边框盒子模型(border-box). content-box:设置的尺寸,只设置内容区域, 左外边距+左边框+左内边距+内容区域宽 ...
- SQL比较两表字段和字段类型
一.问题 业务需要把TB_Delete_KYSubProject表数据恢复到TB_KYSubProject,但提示错误,错误原因是两表字段类型存在不一致 insert into [TB_KYSubPr ...
- visual studio中使用vim快捷键
vsvim下载链接: https://marketplace.visualstudio.com/items?itemName=JaredParMSFT.VsVim 下载,关闭visual studio ...
- poj2065 SETI
题目描述: 多组数据,每次给出一个模数$p$和一个表示答案的字符串, 相当于给出一个方程组:$$a_1*1^{1}+a_2*1^{2}+……+a_n*1^{n}=f_1$$ $$a_1*2^{1}+a ...