[USACO2004][poj1985]Cow Marathon(2次bfs求树的直径)
http://poj.org/problem?id=1985
题意:就是给你一颗树,求树的直径(即问哪两点之间的距离最长)
分析:
1、树形dp:只要考虑根节点和子节点的关系就可以了
2、两次bfs:
①任意从一个点u出发bfs,设其能到的最远点为v
②从v出发重新bfs,设其能到达的最远点为s
③则树的直径就是v->s
证明:
若能证明从任意一个点出发,bfs到的最远点一定在树的直径的端点上,那么第二次bfs就可以证明一定正确了,下面来证明第一次bfs正确性:
①若选择的点u在直径上,那么能到的最远点v一定是树的直径的端点之一
反证:
若v不是树的直径的端点,设树的直径的端点为v1,v2
那么就说明path(u,v)>path(u,v1),path(u,v)>path(u,v2)
所以path(v1,u)+path(u,v)>path(v1,v2),这说明v1,v2不是树的直径的端点,与题设不符,故"v不是树的直径的端点"不成立
②若选择的点u不在直径上,那么能到的最远点v一定是树的直径的端点之一。这个也很好说明,我们知道树的直径一定是经过根节点的(特殊的根节点如果只有一 个孩子那么就连到根节点为止),即可以理解跨过根节点两边。所以我们在第一次从u bfs的时候,中间一定会bfs到直径上的某点,那么接下来就是又回到了① 情况了。
综上,成立、
[USACO2004][poj1985]Cow Marathon(2次bfs求树的直径)的更多相关文章
- 4612 warm up tarjan+bfs求树的直径(重边的强连通通分量)忘了写了,今天总结想起来了。
问加一条边,最少可以剩下几个桥. 先双连通分量缩点,形成一颗树,然后求树的直径,就是减少的桥. 本题要处理重边的情况. 如果本来就两条重边,不能算是桥. 还会爆栈,只能C++交,手动加栈了 别人都是用 ...
- HDU4612+Tarjan缩点+BFS求树的直径
tarjan+缩点+树的直径题意:给出n个点和m条边的图,存在重边,问加一条边以后,剩下的桥的数量最少为多少.先tarjan缩点,再在这棵树上求直径.加的边即是连接这条直径的两端. /* tarjan ...
- 牛客小白月赛6C-桃花(DFS/BFS求树的直径)
链接:https://www.nowcoder.com/acm/contest/136/C 来源:牛客网 桃花 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言 ...
- POJ 1985 Cow Marathon (树形DP,树的直径)
题意:给定一棵树,然后让你找出它的直径,也就是两点中的最远距离. 析:很明显这是一个树上DP,应该有三种方式,分别是两次DFS,两次BFS,和一次DFS,我只写了后两种. 代码如下: 两次BFS: # ...
- 两次bfs求树的直径的正确性
结论:离树上任意点\(u\)最远的点一定是这颗树直径的一个端点. 证明: 若点\(u\)在树的直径上,设它与直径两个端点\(x,y\)的距离分别为\(S1\).\(S2\),若距离其最远的点\(v\) ...
- poj1985 Cow Marathon (求树的直径)
Cow Marathon Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 3195 Accepted: 1596 Case ...
- poj:1985:Cow Marathon(求树的直径)
Cow Marathon Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 5496 Accepted: 2685 Case ...
- 树的直径 【bzoj3363】[Usaco2004 Feb]Cow Marathon 奶牛马拉松
3363: [Usaco2004 Feb]Cow Marathon 奶牛马拉松 Description 最近美国过度肥胖非常普遍,农夫约翰为了让他的奶牛多做运动,举办了奶牛马拉松.马拉 松路线要尽 ...
- 题解报告:poj 1985 Cow Marathon(求树的直径)
Description After hearing about the epidemic of obesity in the USA, Farmer John wants his cows to ge ...
随机推荐
- 03.NopCommerce功能与特点介绍
前两节我们主要介绍了NopCommerce下载与安装和NopCommerce中文语言包,让大家体验一下NopCommerce.这次我们主要来介绍NopCommerce的功能与特点. NopCommer ...
- selenium处理滚动条
1.用js实现 滚动到底部 String js="document.documentElement.scrollTop=10000"滚动到顶部 String js="do ...
- 【Android 基础】Animation 动画介绍和实现
在前面PopupWindow 实现显示仿腾讯新闻底部弹出菜单有用到Animation动画效果来实现菜单的显示和隐藏,本文就来介绍下吧. 1.Animation 动画类型 Android的animati ...
- python中的深拷贝和潜拷贝
>>> a = ['ace',['age',10]] >>> b = a[:] >>> c = list(a) >>> for ...
- Unity中小地图做法
FPS游戏的小地图 在FPS的这个Demo中,制作了一个小地图,效果图如下 主相机设置 下面来看一下,主相机的设置 解释 通过上面两幅图,能够看出来两个摄像机所渲染的Layer不一样,当然它们所在的L ...
- C++基础笔记(二)C++对C的扩展
Xcode创建C++项目 1.新建一个MAC工程(command line tool) 2.导入头文件 3.修改文件后缀(*.m-->*.mm) 4.修改主函数中的OC代码为C++的代码 动 ...
- 查看和设置oracle数据库的最大连接数
当前的连接数 select count(*) from v$process; 设置的最大连接数(默认值为150) select value from v$parameter where name = ...
- java9-1.类,抽象类,接口的综合小练习
/* 教练和运动员案例(学生分析然后讲解) 乒乓球运动员和篮球运动员. 乒乓球教练和篮球教练. 为了出国交流,跟乒乓球相关的人员都需要学习英语. 请用所学知识: 分析,这个案例中有哪些抽象类,哪些接口 ...
- View (二) 自定义属性 自定义属性的格式详解
自定义属性格式一共有十种: 1. reference:参考某一资源ID. 2. color:颜色值. 3. boolean:布尔值. 4. dimension:尺寸值. 5. float:浮点值. 6 ...
- kvm虚拟化管理平台WebVirtMgr部署-完整记录(安装ubuntu虚拟机)-(5)
之前介绍了在webvirtmgr平台下创建centos,windows server 2008的虚拟机,今天说下创建ubuntu虚拟机的过程. (1)首先下载ubuntu16.04的iso镜像放到/u ...