bzoj2237[NCPC2009]Flight Planning 结论题?
2237: [NCPC2009]Flight Planning
Time Limit: 10 Sec Memory Limit: 256 MB
Submit: 55 Solved: 27
[Submit][Status][Discuss]
Description
S航空公司在N座城市之间有N-1条航线,航线是双向的。任意两座城市都是可以互相到达的,但是可能需要在一些城市换乘不同的航线。
目前有人抱怨要到达有些城市需要换乘太多次,S航空公司为了缓解这一现状,决定取消目前的一条航线,添加另一条航线,在保证任意两座城市还是可以互相到达的前提下,使得两座城市之间需要乘坐的航线次数的最大值最小。
Input
第一行为一个整数N(4<=N<=2500),表示城市的个数。城市从1到N编号。
接下来N-1行,每行是一对整数a和b,表示一条连接a和b的航线(1<=a,b<=N)。
Output
输出仅一行,即航空公司进行调整后,任意两座城市之间需要乘坐的航班次数的最大值。
Sample Input
1 2
2 3
3 4
Sample Output
【样例解释】
取消3-4的航线,添加2-4的航线。
HINT
对于100%的数据,N<=2500。
题意:在一棵树上,你可以任意删除一条边再加上一条并使得这个图还是颗树,在此前提下,你要让树的直径最小,求最小直径
n^2是可以接受的
枚举每一条边,把它断开,形成两个联通块,对这两个联通块求直径l1 l2
那么ans=min(ans,max(l1,l2,(l1+1)/2+(l2+1)/2+1))
简单说明一下后面那一坨:
对于两棵树,要把它们连起来后是直径最小,肯定是链接两颗树直径的中点
用反证法可以证明这样更优:假设选择另外的点链接,那么直径两端(a , b)到它的距离的max(disa,disb) 不会比到中点的距离短
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#define N 2505
using namespace std;
int n,tot=,l1,l2,hd[N],dis[N],x[N],y[N],ban[N<<];
struct edge{int u,v,next;}e[N<<];
void adde(int u,int v){
e[++tot].v=v;
e[tot].u=u;
e[tot].next=hd[u];
hd[u]=tot;
}
void dfs(int u,int fa){
for(int i=hd[u];i;i=e[i].next){
int v=e[i].v;
if(v==fa||ban[i])continue;
dis[v]=dis[u]+;
dfs(v,u);
}
}
int getlen(int x){
int t1,t2;
memset(dis,,sizeof(dis));
dfs(x,);t1=x;
for(int i=;i<=n;i++)
if(dis[i]>dis[t1])t1=i;
memset(dis,,sizeof(dis));
dfs(t1,);t2=t1;
for(int i=;i<=n;i++)
if(dis[i]>dis[t2])t2=i;
return dis[t2];
}
int main(){
scanf("%d",&n);
for(int i=;i<n;i++){
int u,v;
scanf("%d%d",&u,&v);
adde(u,v);adde(v,u);
}int ans=<<;
for(int i=;i<=tot;i+=){
ban[i]=ban[i^]=;
l1=getlen(e[i].u);
l2=getlen(e[i].v);
ans=min(ans,max(l1,max(l2,(l1+)/+(l2+)/+)));
ban[i]=ban[i^]=;
}printf("%d",ans);
return ;
}
bzoj2237[NCPC2009]Flight Planning 结论题?的更多相关文章
- 【BZOJ】2237: [NCPC2009]Flight Planning
题意 \(n(1 \le n \le 2500)\)个点的树,求删掉一条边再加上一条边使得还是一棵树,且任意两点最大距离最小. 分析 考虑枚举删掉每一条边,我们只需要考虑如何加边容易求得新树的最大距离 ...
- [codevs5578][咸鱼]tarjan/结论题
5578 咸鱼 时间限制: 1 s 空间限制: 128000 KB 题目描述 Description 在广袤的正方形土地上有n条水平的河流和m条垂直的河流,发达的咸鱼家族在m*n个河流交叉点都 ...
- BZOJ_1367_[Baltic2004]sequence_结论题+可并堆
BZOJ_1367_[Baltic2004]sequence_结论题+可并堆 Description Input Output 一个整数R Sample Input 7 9 4 8 20 14 15 ...
- [BZOJ3609][Heoi2014]人人尽说江南好 结论题
Description 小 Z 是一个不折不扣的 ZRP(Zealot Round-game Player,回合制游戏狂热玩家), 最近他 想起了小时候在江南玩过的一个游戏. 在过去,人们是要 ...
- 【uoj#282】长度测量鸡 结论题
题目描述 给出一个长度为 $\frac{n(n+1)}2$ 的直尺,要在 $0$ 和 $\frac{n(n+1)}2$ 之间选择 $n-1$ 个刻度,使得 $1\sim \frac{n(n+1)}2$ ...
- 【uoj#175】新年的网警 结论题+Hash
题目描述 给出一张 $n$ 个点 $m$ 条边的无向连通图,每条边的边权为1.对于每个点 $i$ ,问是否存在另一个点 $j$ ,使得对于任意一个不为 $i$ 或 $j$ 的点 $k$ ,$i$ 到 ...
- 【uoj#180】[UR #12]实验室外的攻防战 结论题+树状数组
题目描述 给出两个长度为 $n$ 的排列 $A$ 和 $B$ ,如果 $A_i>A_{i+1}$ 则可以交换 $A_i$ 和 $A_{i+1}$ .问是否能将 $A$ 交换成 $B$ . 输入 ...
- 【bzoj4401】块的计数 结论题
题目描述 给出一棵n个点的树,求有多少个si使得整棵树可以分为n/si个连通块. 输入 第一行一个正整数N,表示这棵树的结点总数,接下来N-1行,每行两个数字X,Y表示编号为X的结点与编号为Y的结点相 ...
- 【bzoj3997】[TJOI2015]组合数学 Dilworth定理结论题+dp
题目描述 给出一个网格图,其中某些格子有财宝,每次从左上角出发,只能向下或右走.问至少走多少次才能将财宝捡完.此对此问题变形,假设每个格子中有好多财宝,而每一次经过一个格子至多只能捡走一块财宝,至少走 ...
随机推荐
- Flask 学习 六 大型程序结构
pip freeze >requirement.txt 自动生成版本号 pip install -r requirement.txt 自动下载对应的库 梳理结构 config.py #!/usr ...
- bzoj千题计划244:bzoj3730: 震波
http://www.lydsy.com/JudgeOnline/problem.php?id=3730 点分树内对每个节点动态维护2颗线段树 线段树以距离为下标,城市的价值为权值 对于节点x的两棵线 ...
- JAVA_SE基础——10.变量的作用域
<pre name="code" class="java"> 上个月实在太忙了,从现在开始又可以静下心来写blog了. 变量的作用域指 可以使用此变 ...
- 使用JavaScript实现一个俄罗斯方块
清明假期期间,闲的无聊,就做了一个小游戏玩玩,目前游戏逻辑上暂未发现bug,只不过样子稍微丑了一些-.-项目地址:https://github.com/Jiasm/tetris在线Demo:http: ...
- 老帖收藏,留供参考:SpringMvc2.5+Mybatis3.2.7
一.项目背景 SpringMvc+Mybatis 数据库连接池是阿里巴巴的druid.日志框架式logback 二.配置文件 1.SpringMvc-servlet.xml <?xml vers ...
- IOS 中openGL使用教程4(openGL ES 入门篇 | 离屏渲染)
通常情况下,我们使用openGL将渲染好的图片绘制到屏幕上,但有时候我们不想显示处理结果,这时候就需要使用离屏渲染了. 正常情况下,我们将屏幕,也就是一个CAEAGLLayer对象作为渲染目标,离屏渲 ...
- Oracle表空间的管理方式
解释说明:表空间是一个逻辑概念:=> oracle 逻辑概念段区块管理方式: number one => tablespace number two=> segments Oracl ...
- 学习React系列(三)——Refs和Dom
一.适用于以下场景: 1.控制焦点,文本选择,或者媒体控制 2.触发必要的动画 3.整合第三方dom库 二.不要过度使用ref 如果想通过ref来改变state,那么换一种方式-变量提升可能会更好. ...
- spring boot / cloud (二十) 相同服务,发布不同版本,支撑并行的业务需求
spring boot / cloud (二十) 相同服务,发布不同版本,支撑并行的业务需求 有半年多没有更新了,按照常规剧本,应该会说项目很忙,工作很忙,没空更新,吧啦吧啦,相关的话吧, 但是细想想 ...
- Linux OpenGL 实践篇-5 纹理
纹理 在之前的实践中,我们所渲染的物体的表面颜色都是纯色或者根据顶点位置计算出的一个颜色,这种方式在表现物体细节方面是比较吃资源的,因为我们每增加一个细节,我们就需要定义更多的顶点及其属性.所以美术人 ...