●BZOJ 2500 幸福的道路
题链:
http://www.lydsy.com/JudgeOnline/problem.php?id=2500
题解:
DFS,单调队列
首先有一个结论,距离树上某一个点最远的点一定是树的直径的一个端点。
然后就3个DFS求出直接并得到D[i]数组表示i点到最远的点的距离。
然后就用两个单调队列分别维护一个单减的最大值和一个单增的最小值,
以便求出以i位置结尾的最长合法区间。
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#define MAXN 1000500
#define rint register int
using namespace std;
struct Edge{
int to[MAXN*2],val[MAXN*2],nxt[MAXN*2],head[MAXN],ent;
Edge(){ent=2;}
void Adde(int &u,int &v,int &w){
to[ent]=v; val[ent]=w; nxt[ent]=head[u]; head[u]=ent++;
to[ent]=u; val[ent]=w; nxt[ent]=head[v]; head[v]=ent++;
}
}E;
int D[MAXN];
int N,M,d1,d2,val;
char gc(){
//return getchar();
static char s[300005];
static int bit=300000,p=0,len=0;
if(p>=len) len=fread(s,1,bit,stdin),s[len]=EOF,p=0;
return s[p++];
}
void read(int &x){
static int sn; static char ch;
x=0; sn=1; ch=gc();
while(ch<'0'||'9'<ch){if(ch=='-')sn=-1;ch=gc();}
while('0'<=ch&&ch<='9'){x=x*10+ch-'0';ch=gc();}
x=x*sn;
}
void cmax(int &a,int b){
if(a<b) a=b;
}
void dfs(int u,int fa,int len,int &d){
if(len>=val) d=u,val=len;
cmax(D[u],len);
for(int i=E.head[u];i;i=E.nxt[i]){
if(E.to[i]==fa) continue;
dfs(E.to[i],u,len+E.val[i],d);
}
}
int solve(){
static int qmx[MAXN],qmn[MAXN],lmx=1,rmx=0,lmn=1,rmn=0,ANS=0,p=1;
for(int i=1;i<=N;i++){
while(lmx<=rmx&&D[qmx[rmx]]<=D[i]) rmx--;
while(lmn<=rmn&&D[qmn[rmn]]>=D[i]) rmn--;
qmx[++rmx]=i; qmn[++rmn]=i;
while(D[qmx[lmx]]-D[qmn[lmn]]>M){
if(qmx[lmx]<qmn[lmn]) p=qmx[lmx]+1,lmx++;
else p=qmn[lmn]+1,lmn++;
}
cmax(ANS,i-p+1);
}
return ANS;
}
int main(){
read(N); read(M);
for(rint i=2,f,d;i<=N;i++)
read(f),read(d),E.Adde(f,i,d);
val=0; dfs(1,0,0,d1);
val=0; dfs(d1,0,0,d2);
val=0; dfs(d2,0,0,d1);
printf("%d",solve());
return 0;
}
●BZOJ 2500 幸福的道路的更多相关文章
- [BZOJ 2500] 幸福的道路
照例先贴题面(汪汪汪) 2500: 幸福的道路 Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 368 Solved: 145[Submit][Sta ...
- [BZOJ 2500]幸福的道路 树形dp+单调队列+二分答案
考试的时候打了个树链剖分,而且还审错题了,以为是每天找所有点的最长路,原来是每天起点的树上最长路径再搞事情.. 先用dfs处理出来每个节点以他为根的子树的最长链和次长链.(后面会用到) 然后用类似dp ...
- bzoj 2500 幸福的道路 树上直径+set
首先明确:树上任意一点的最长路径一定是直径的某一端点. 所以先找出直径,求出最长路径,然后再求波动值<=m的最长区间 #include<cstdio> #include<cst ...
- BZOJ 2500 幸福的道路(race) 树上直径+平衡树
structHeal { priority_queue<int> real; priority_queue<int> stack; void push(int x){ real ...
- 【BZOJ】【2500】幸福的道路
树形DP+单调队列优化DP 好题(也是神题……玛雅我实在是太弱了TAT,真是一个250) 完全是抄的zyf的……orz我还是退OI保平安吧 第一步对于每一天求出一个从第 i 个点出发走出去的最长链的长 ...
- 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]幸福的道路(树上最远点)
2500: 幸福的道路 Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 474 Solved: 194[Submit][Status][Discuss ...
- 【BZOJ2500】幸福的道路 树形DP+RMQ+双指针法
[BZOJ2500]幸福的道路 Description 小T与小L终于决定走在一起,他们不想浪费在一起的每一分每一秒,所以他们决定每天早上一同晨练来享受在一起的时光. 他们画出了晨练路线的草图,眼尖的 ...
随机推荐
- MySQL的小Tips
交集和差集 MySQL中没有这两个运算,但是有并集运算,所以可以利用这个来间接实现. 差集: SELECT ID FROM ( SELECT DISTINCT A.AID AS ID FROM TAB ...
- Archlinux无线联网教程
本人是学生党,故对于有线方式不甚了解,学校里一般使用mentohust用动态IP方式联网,或者直接连接wifi,这里介绍无线联网的一些方式,主要包括公共wifi和带有WEP或者WPA或者WPA2PSK ...
- Archlinux安装和使用技巧
一 准备工作 1 文件下载及启动盘制作 文件可以在https://mirrors.ustc.edu.cn/,这是个中科大的镜像网,选择如下: 下载完成后,就是制作一个启动盘,我使用的是Linux下强 ...
- Django 基本设置
建立django目录,为了独立区分app和主站的关系,需要把app完全和主站分离 app/views.py from django.shortcuts import render from djang ...
- 部分和问题 nyoj
部分和问题 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 给定整数a1.a2........an,判断是否可以从中选出若干数,使它们的和恰好为K. 输入 首先, ...
- Django-rest-framework源码分析----认证
一.前言 1.1.安装 两种方式: github pip直接安装 pip install django-rest-framework 1.2.需要先了解的一些知识 理解下面两个知识点非常重要,djan ...
- Mybatis学习日志
在Mybatis深入学习的一周中,总感觉跟着师傅的视屏讲解什么都能懂,但实际自己操作的时候才发现自己一脸懵逼,不知道从何入手.但还好自己做了点笔记.在此记录一下自己浅度学习Mybatis遇到几个小问题 ...
- Linux - IDA - 安装 ( 带F5功能 )
Linux - IDA - 安装 ( 带F5功能 ) 0x00 前言 最近在熟悉deepin系统,想着把逆向的一些软件也迁移过去,但像ida,Ollydbg这些工具一般都是在windows下使用,所以 ...
- Web Service的工作原理
Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的 ...
- 新概念英语(1-103)The French Test
Lesson 103 The French test 法语考试 Listen to the tape then answer this question. How long did the exam ...