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发现可以用树来描绘这个草图. ...
随机推荐
-
CSV文件分割与列异常处理的python脚本
csv文件通常存在如下问题: 1. 文件过大(需要进行文件分割)2. 列异常(列不一致,如元数据列为10列,但csv文件有些行是11列,或者4列)本脚本用于解决此问题. #coding=utf-8 ' ...
-
UITableViewHeaderFooterView的封装
UITableViewHeaderFooterView的封装 特点 1. 封装的 UITableViewHeaderFooterView 能够让用户更好的自定义自己的 headerView; 2. 封 ...
-
Android 在View中更新View
直接用Invalidate()方法会导致错误:只有主线程才能更新UI 取而代之的是可以使用postInvalidate(); 原因: 最终会调用ViewRootImpl类的dispatchInvali ...
-
.net的Hello World之旅
class Program { //这是主函数,是程序的入口 static void Main(string[] args) { ...
-
Linux集群及LVS简介
一.什么是集群 通过一组松散集成的计算机软件和/或硬件连接起来高度紧密地协作完成计算工作.在某种意义上,他们可以被看作是一台计算机.集群系统中的单个计算机通常称为节点,通常通过局域网连接,但也有其它的 ...
-
java 获取数组(二维数组)长度实例程序
我们可能知道 js有个length函数,java也有啊length函数 例 如果数组是data[],则data.length 代码如下 复制代码 byte[] phone =new byte[81]; ...
-
struts2 package元素
<package../>元素 name 必选 包名 extends 可选 继承 namespace ...
-
NYOJ-745蚂蚁的难题(二)
这道题和求字段和的要求就差一点,就是那个是一条链, 这个是个环,关于这么环,刚开始按照链那种方式推倒状态转移方程,但是没有写出来,后来看题解,才看到原来还是转化为普通的单链来做,好多题都是由不会的转化 ...
-
static说明
1.最基本用法:加static的全局变量或者函数,只能在本文件中使用.可见性只在本文件中. 当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性.为理解这句话,我举例来说 ...
-
现场故障案例:AIX安装Oracle10G runInstaller弹出错误一例
AIX安装Oracle10G runInstallert弹出错误一例 环境: 系统:AIX5300-08 数据库:Oracle 10g(64bit) AIX客户机卸载oracle软件后,又一次安装or ...