Description

某个国家有n个城市,这n个城市中任意两个都连通且有唯一一条路径,每条连通两个城市的道路的长度为zi(zi<=1000)。

这个国家的人对火焰有超越宇宙的热情,所以这个国家最兴旺的行业是消防业。由于政府对国民的热情忍无可忍(大量的消防经费开销)可是却又无可奈何(总统竞选的国民支持率),所以只能想尽方法提高消防能力。

现在这个国家的经费足以在一条边长度和不超过s的路径(两端都是城市)上建立消防枢纽,为了尽量提高枢纽的利用率,要求其他所有城市到这条路径的距离的最大值最小。你受命监管这个项目,你当然需要知道应该把枢纽建立在什么位置上。

n<=300000

Solution

显然,要求的路径一定在树的直径上,那么二分答案

然后计算其他点到直径的距离的最大值做为二分的l

Code

#include <cstdio>
#include <algorithm>
#include <cstring>
#include <vector>
#include <queue>
#define N 300010
#define ll long long
using namespace std;struct info{int fr,to,nex,w;}e[N*2];
int n,s,tot,head[N],Ans,st,ed,len,pre[N],u;
vector<int> V;
ll l,r=1e16;inline int read(){int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*f;
}inline void Link(int u,int v,int w){e[++tot].to=v;e[tot].fr=u;e[tot].w=w;e[tot].nex=head[u];head[u]=tot;
}bool vis[N],is_path[N];
ll dis[N];
int id,mx;
queue<int> q;
void bfs(int s){memset(vis,0,sizeof(vis));memset(dis,0,sizeof(dis));while(!q.empty()) q.pop();vis[s]=1,mx=0;q.push(s);while(!q.empty()){int u=q.front();q.pop();for(int i=head[u];i;i=e[i].nex){int v=e[i].to;if(vis[v]) continue;vis[v]=1;dis[v]=dis[u]+e[i].w*(is_path[v]^1);l=max(l,dis[v]);pre[v]=u;q.push(v);if(dis[v]>mx){mx=dis[v];id=v;}}}
}bool check(ll m){int l=0,r=len-1;while(l<len&&V[0]-V[l]<=m) l++;l--;while(r>=0&&V[r]<=m) r--;r++;return V[l]-V[r]<=s;
}void Init(){n=read(),s=read();for(int i=1;i<n;++i){int u=read(),v=read(),w=read();Link(u,v,w);Link(v,u,w);}bfs(1);st=id;bfs(id);ed=id;for(u=ed;u!=st;u=pre[u]) V.push_back(dis[u]),is_path[u]=1;V.push_back(dis[u]);is_path[u]=1;len=V.size();l=0;bfs(ed);
}void Solve(){while(l<r){ll m=(l+r)>>1;if(check(m)) Ans=m,r=m;else l=m+1;}printf("%d\n",Ans);
}int main(){Init(); Solve();    return 0;
}

转载于:https://www.cnblogs.com/void-f/p/8639122.html

[Bzoj2282]消防(二分答案+树的直径)相关推荐

  1. nssl1156-今天你AK了吗?【康托展开,高精度,二分答案,树状数组】

    正题 题目大意 求n个数的全排列的第k个. 解题思路 首先康拓逆展开 ∑ii<=nxi(n−i)!\sum^{i<=n}_i x_i(n-i)!∑ii<=n​xi​(n−i)! 求每 ...

  2. AtCoder Regular Contest 101 (ARC101) D - Median of Medians 二分答案 树状数组

    原文链接https://www.cnblogs.com/zhouzhendong/p/ARC101D.html 题目传送门 - ARC101D 题意 给定一个序列 A . 定义一个序列 A 的中位数为 ...

  3. 二分+树的直径 [Sdoi2011]消防

    问题 D: [Sdoi2011]消防 时间限制: 1 Sec 内存限制: 512 MB 提交: 12 解决: 6 [提交][状态][讨论版] 题目描述 某个国家有n个城市,这n个城市中任意两个都连通且 ...

  4. P1099 树的直径 DFS + 二分 / 尺取法

    题意 传送门 P1099 树网的核 在任意一条直径上求出的最小偏心距都相等. 树上只有一条直径时显然成立.当树有多条直径,它们必定相交,且中点汇聚于同一处,那么中心附近树的各条直径的重叠部分是相同的, ...

  5. [BZOJ4556][TJOI2016HEOI2016]字符串(二分答案+后缀数组+RMQ+主席树)

    4556: [Tjoi2016&Heoi2016]字符串 Time Limit: 20 Sec  Memory Limit: 128 MB Submit: 1360  Solved: 545 ...

  6. 【题解】 [HEOI2016]排序题解 (二分答案,线段树)

    题目描述 在2016年,佳媛姐姐喜欢上了数字序列.因而他经常研究关于序列的一些奇奇怪怪的问题,现在他在研究一个难题,需要你来帮助他.这个难题是这样子的:给出一个1到n的全排列,现在对这个全排列序列进行 ...

  7. [APIO2018] New Home 新家(线段树,二分答案,离散化)

    [APIO2018] New Home 新家 Solution 对于时间轴我们直接离散化+扫描线,维护每一个商店的加入和删除. 对于询问(x,t)(x,t)(x,t),不好直接回答,这里的关键一步是: ...

  8. 牛客题霸 [ 树的直径] C++题解/答案

    牛客题霸 [ 树的直径] C++题解/答案 题目描述 给定一棵树,求出这棵树的直径,即两个节点距离的最大值. 题解: 不知道大家听没听过一个结论: 树的直径可以通过两边dfs找到 步骤: 1.从任意一 ...

  9. YBTOJ洛谷P2839:最大中位数(主席树、二分答案)

    遇事不决,二分试试 解析 很好的一道题 真是把主席树玩明白了 一个关于中位数的常用trick: 二分答案mid,把>=mid的看成1,<mid的看成-1,然后看最大子段和是否>=0 ...

最新文章

  1. 深度学习与工业互联网安全
  2. Android第三十八期 - 评价标签FlowLayout
  3. 中石油训练赛 - 位置(模拟+思维)
  4. Zookeeper Listener分析
  5. 有100个GMAIL的邀请,需要的来信就可以啦。
  6. access insert语句怎么写_码住!MySQL中超实用的几种SQL语句
  7. 【174个】最全DICOM资料汇总[截止10.10.20][中国数字医疗论坛]
  8. SPSS学习(五)独立样本t检验
  9. 微信小程序:2022虎年全新头像框制作
  10. 要闻君说:华为“发飙”了;快手抛出了1000+社招岗位;迅雷2018年度财报:云连续三年上涨;定论!小米成立AIoT战略委员会...
  11. mac电脑谷歌浏览器全屏显示选项卡
  12. 常见720P和1080P的分辨率倒底是多少?
  13. SpringBoot + Thymeleaf 练手小项目 --------- 豆瓣网站模拟
  14. MapBox使用之路线规划
  15. 浅谈Unity的渲染优化(1): 性能分析和瓶颈判断(上篇)
  16. MySQL笔记:第11章_数据处理之增删改
  17. 蓝牙技术|蓝牙助力智能手表的未来发展
  18. java导出doc文档
  19. 他们是公众号界的一股清流!
  20. VMware上Ubuntu实现和windows复制粘贴

热门文章

  1. webmin下重启linux系统
  2. Asp.net Mvc问题索引
  3. #pragma once 是什么意思?
  4. The Road to learn React书籍学习笔记(第三章)
  5. VUE中使用sass
  6. RHEL6 PXE+KickStart全自动安装配置指南
  7. Winform开发框架中工作流模块之审批会签操作
  8. javascript函数、对象及变量、正则表达式(7.19)
  9. iOS学习笔记2-微博cell界面的实现
  10. 10月10号面试技术总结