bzoj 2500 幸福的道路 树上直径+set
首先明确:树上任意一点的最长路径一定是直径的某一端点。
所以先找出直径,求出最长路径,然后再求波动值<=m的最长区间
- #include<cstdio>
- #include<cstring>
- #include<iostream>
- #include<cmath>
- #include<algorithm>
- #include<ctime>
- #include<set>
- #define N 1000005
- using namespace std;
- int fa[N],cal[N],dis[2][N],d[N];
- int e=1,head[N];
- struct edge{
- int u,v,w,next;
- }ed[N];
- void add(int u,int v,int w){
- ed[e].u=u; ed[e].v=v; ed[e].w=w;
- ed[e].next=head[u]; head[u]=e++;
- }
- int L,R,it,maxn;
- bool bo[N];
- void dfs(int x,int len){
- bo[x]=1;
- if(len>maxn) it=x,maxn=len;
- if(!bo[fa[x]]) dfs(fa[x],len+cal[x]);
- for(int i=head[x];i;i=ed[i].next){
- if(!bo[ed[i].v])
- dfs(ed[i].v,len+ed[i].w);
- }
- }
- int q[N],h,t;
- void bfs(int x,int wh){
- bo[x]=1;int now,v,w; dis[wh][x]=0;
- q[1]=x; h=t=1;
- while(h<=t){
- now=q[h++];
- if(fa[now]&&!bo[fa[now]]&&dis[wh][fa[now]]<dis[wh][now]+cal[now]){
- dis[wh][fa[now]]=dis[wh][now]+cal[now];
- bo[fa[now]]=1; q[++t]=fa[now];
- }
- for(int i=head[now];i;i=ed[i].next){
- v=ed[i].v; w=ed[i].w;
- if(!bo[v]&&dis[wh][v]<dis[wh][now]+w){
- dis[wh][v]=dis[wh][now]+w;
- bo[v]=1; q[++t]=v;
- }
- }
- }
- }
- int n,m;
- int main()
- {
- //freopen("race.in","r",stdin);
- //freopen("race.out","w",stdout);
- scanf("%d%d",&n,&m);
- for(int i=2;i<=n;i++){
- scanf("%d%d",&fa[i],&cal[i]);
- add(fa[i],i,cal[i]);
- }
- maxn=0; memset(bo,0,sizeof bo); dfs(1,0); L=it;
- maxn=0; memset(bo,0,sizeof bo); dfs(L,0); R=it;
- memset(bo,0,sizeof bo); bfs(L,0);
- memset(bo,0,sizeof bo); bfs(R,1);
- for(int i=1;i<=n;i++) d[i]=max(dis[0][i],dis[1][i]);
- //printf("%0.2lf\n",(double)clock()/CLOCKS_PER_SEC);
- multiset<int > ss;
- int dd,xx,ll=1,ans=0;
- for(int i=1;i<=n;i++){
- ss.insert(d[i]);
- dd=*(--ss.end());
- xx=*(ss.begin());
- while(dd-xx>m)
- ss.erase(ss.find(d[ll++])),dd=*(--ss.end()),xx=*(ss.begin());
- ans=max(ans,i-ll+1);
- }
- printf("%d\n",ans);
- return 0;
- }
然而我打的依旧很蠢。。QAQ
bzoj 2500 幸福的道路 树上直径+set的更多相关文章
- [BZOJ 2500] 幸福的道路
照例先贴题面(汪汪汪) 2500: 幸福的道路 Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 368 Solved: 145[Submit][Sta ...
- BZOJ 2500 幸福的道路(race) 树上直径+平衡树
structHeal { priority_queue<int> real; priority_queue<int> stack; void push(int x){ real ...
- ●BZOJ 2500 幸福的道路
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=2500 题解: DFS,单调队列 首先有一个结论,距离树上某一个点最远的点一定是树的直径的一个 ...
- [BZOJ 2500]幸福的道路 树形dp+单调队列+二分答案
考试的时候打了个树链剖分,而且还审错题了,以为是每天找所有点的最长路,原来是每天起点的树上最长路径再搞事情.. 先用dfs处理出来每个节点以他为根的子树的最长链和次长链.(后面会用到) 然后用类似dp ...
- 【BZOJ】【2500】幸福的道路
树形DP+单调队列优化DP 好题(也是神题……玛雅我实在是太弱了TAT,真是一个250) 完全是抄的zyf的……orz我还是退OI保平安吧 第一步对于每一天求出一个从第 i 个点出发走出去的最长链的长 ...
- [Bzoj2500]幸福的道路(树上最远点)
2500: 幸福的道路 Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 474 Solved: 194[Submit][Status][Discuss ...
- 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 ...
- BZOJ 4753 [Jsoi2016]最佳团体 | 树上背包 分数规划
BZOJ 4753 [Jsoi2016]最佳团体 | 树上背包 分数规划 又是一道卡精度卡得我头皮发麻的题-- 题面(--蜜汁改编版) YL大哥是24OI的大哥,有一天,他想要从\(N\)个候选人中选 ...
随机推荐
- mysql6.5 操作日志
创建用户并授权 grant all privileges on database.* to user@localhost identified by '123456'; flush privilege ...
- Construct Binary Tree from Inorder and Postorder Traversal(根据中序遍历和后序遍历构建二叉树)
根据中序和后续遍历构建二叉树. /** * Definition for a binary tree node. * public class TreeNode { * int val; * Tree ...
- Java的运行原理
在Java中引入了虚拟机的概念,即在机器和编译程序之间加入了一层抽象的虚拟的机器.这台虚拟的机器在任何平台上都提供给编译程序一个的共同的接口.编译程序只需要面向虚拟机,生成虚拟机能够理解的代码,然后由 ...
- Day24 中间件 自定义分页 ModelForm 序列化 缓存 信号
在views里边,怎么导入局部配置和全局配置 from s18day24 import settings #这样导入的是仅仅用户自定义的配置 from django.conf import setti ...
- LAMP的搭建
可以在网上找整合包: httpd-2.4.18 + mysql-5.6.29 + php-5.5.30编译安装过程: 编译源代码后安装软件的位置:/usr/local/ 一.编译安装apache ap ...
- 重装完的win10卡“请稍等”,然后电脑不断自动重启还是卡在“请稍等”?
http://bbs.pcbeta.com/viewthread-1625778-1-1.html 说实话我用U盘安装win10遇到过几次这种情况,不管是win10正式版还是之前的个别win10测试版 ...
- 第一次作业 orm环境构建(hibernate)及基本的demo
一.数据库 1.创建数据库hibernate01-1514010311 2.创建表 customer CREATE TABLE customer( id int(11) not null auto_i ...
- 《Linux下FTP服务器搭建及FTP使用》
.LOGAndy:mxtd114 <Linux下FTP服务器搭建> 0.root登录 1.安装ftp # yum -y install ftp 2.安装vsftpd # yum -y in ...
- 简单而强大的bitset
简单而强大的bitset 介绍 有些程序需要处理二进制有序集,标准库提供了bitset 类型,事实上,bitset 是一个二进制容器,容器中每一个元素都是一位二进制码,或为 0,或为 1. 基础 bi ...
- 深度学习之 TensorFlow(四):卷积神经网络
基础概念: 卷积神经网络(CNN):属于人工神经网络的一种,它的权值共享的网络结构显著降低了模型的复杂度,减少了权值的数量.卷积神经网络不像传统的识别算法一样,需要对数据进行特征提取和数据重建,可以直 ...