[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发现可以用树来描绘这个草图. ...
随机推荐
- Android手机app耗电量测试工具 - Gsam Battery Monitor
这段时间需要测试一个Android手机app的耗电量,在网上找了一个工具,Gsam Battery Monitor,觉得挺好用,和大家分享一下. 安装app后打开,可以看到主界面是这样的 点击一下上图 ...
- swift Equatable 的缺省实现
Starting from Swift 4.1, all you have to is to conform to the Equatable protocol without the need of ...
- VBA Promming——分支语句(解二元一次方程)
分支语句 If expression1 Then expressions ElseIf expression2 Then expressions Else expression End If 注:VB ...
- 插入insert几种用法
1.insert ignore into 当插入数据时,如出现错误时,如重复数据,将不返回错误,只以警告形式返回.所以使用ignore请确保语句本身没有问题,否则也会被忽略掉.例如: INSERT I ...
- 最短路 || POJ 2387 Til the Cows Come Home
从点N到1的最短路 *记得无向图两个方向都要建边就好了…… 以及多组数据= = #include <iostream> #include <cstdio> #include & ...
- P1357 花园 (矩阵快速幂+ DP)
题意:一个只含字母C和P的环形串 求长度为n且每m个连续字符不含有超过k个C的方案数 m <= 5 n <= 1e15 题解:用一个m位二进制表示状态 转移很好想 但是这个题是用矩阵快速 ...
- python json.loads json.dumps的区别
json.loads() 是将字符串传化为字典 json.dumps () 是将字典转化为字符串 >>> dict = "{8:'bye', 'you':'coder'}& ...
- Word转html并移植到web项目
1.打开对应word文件 建议使用web视图查看文档 这样可以提前预览转转成html样式 2.如果有图片修改图片大小及格式 在web视图下,把图片调制适当大小,不然导出的html可能图片较小 3.点击 ...
- composer 设置代理
在命令行终端中输入以下内容: export https_proxy='192.168.1.133:1080' export http_proxy='192.168.1.133:1080' 此前提是你已 ...
- luogu 2709小b的询问--莫队
https://www.luogu.org/problemnew/show/P2709 无修改的莫队几乎没有什么太高深的套路,比较模板吧,大多都是在那两个函数上动手脚. 这题询问每一种数字数量的平方和 ...