题意:给一棵树,要求找出两个点,使得所有点到这两个点中距离与自己较近的一个点的距离的最大值(所有点的结果取最大的值,即最远距离)最小。 意思应该都能明白。解法:考虑将这棵树摆直如下:那么我们可以把最中间的那条直径边删掉,然后在分成的两颗子树内求一个直径中心点,那么这两个点就可以作为答案。 反正当时就...
分类:
其他好文 时间:
2014-10-14 19:47:09
阅读次数:
128
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3820
Building Fire Stations
Time Limit: 5 Seconds Memory Limit: 131072 KB Special Judge
Marjar University is a beautif...
分类:
其他好文 时间:
2014-10-14 01:18:17
阅读次数:
377
题目大意:给定一棵树,可以删掉k条边,求删掉后森林中所有树直径的最大值的最小值
最大值最小,典型的二分答案
此题我们二分树的直径,每次二分DFS一次,对于每个节点统计出所有子树删边后的dis,排序,贪心删掉最大的,直到最大的两个子树相加不会超过二分的答案为止
时间复杂度O(nlog^2n)
老子的二分居然写挂了。。。桑不起啊啊啊啊
#include
#include
#include
#...
分类:
其他好文 时间:
2014-10-13 23:22:27
阅读次数:
183
题目:ZOJ Problem Set - 3820 Building Fire Stations
题意:给出n个点,n-1条边的一棵树,然后要在两个点上建立两个消防站,让所有点的到消防站最大距离的点的这个距离最小。
分析:首先先求这个树的直径,然后在树的直径的中点处把树分成两棵树,然后在把两棵树分别取中点的最大值就是ans值。
这个题目数据有点水了感觉。。。
AC代码:
...
分类:
其他好文 时间:
2014-10-13 17:53:09
阅读次数:
213
做同步赛的时候想偏了,状态总是时好时坏,这状态去区域赛果断得GG了。
题目大意:给一棵树,让求出树上两个点,使得别的点到两个点较近的点的距离最大值最小。
赛后用O(n)的算法搞了搞,其实这道题不算难。逗逼的没A。。
其实这两个点一定是树直径上的两个点,如果能想到这个就很好搞了,只需要求出树的直径,然后从中间位置把树拆成两颗子树,然后分别求出子树的中心就好了。
证明如下,假如我们已经求出树上...
分类:
其他好文 时间:
2014-10-13 16:29:39
阅读次数:
172
Building Fire Stations
Time Limit: 5 Seconds Memory Limit: 131072 KB Special Judge
Marjar University is a beautiful and peaceful place. There are N buildings and N - 1 bidirectional ro...
分类:
其他好文 时间:
2014-10-13 12:21:25
阅读次数:
123
题目:poj 1985 Cow Marathon
题意:给出一个树,让你求树的直径。
分析:
树的直径:树上两点之间的最大距离。
我们从任意一点出发,BFS一个最远距离,然后从这个点出发,在BFS一个最远距离,就是树的直径、
AC代码:
/*
POJ:1985 Cow Marathon
2014/10/12/21:18
Yougth*/
#include
#i...
分类:
其他好文 时间:
2014-10-12 23:21:18
阅读次数:
388
3797714
2014-10-12 21:58:19
Accepted
3820
C++
1350
70240
zz_1215
比较麻烦的一道题吧,开始的时候不停的段异常,后面知道是爆栈了,然后用数组模拟递归,才ac了
思路挺简单的,先找到这个树的直径,单独拿出来,可以证明最后选的两个点一定是在直径上的,我就不证了
然后求出这条直径上的每个点向外延伸的最远距离...
分类:
其他好文 时间:
2014-10-12 23:19:28
阅读次数:
454
题目大意:给出一棵树,求两点间的最长距离。
思路:裸地树的直径,两次BFS,第一次随便找一个点宽搜,然后用上次宽搜时最远的点在宽搜,得到的最长距离就是树的直径。
CODE:
#include
#include
#include
#include
#include
#define MAX 80010
using namespace std;
int poin...
分类:
其他好文 时间:
2014-10-10 15:17:56
阅读次数:
228
题目大意:裸的树的直径。
思路:随便用一个点跑BFS,求出这个点到所有点的距离,取距离最长的那个点,再用那个点跑BFS,最远的距离就是这棵树的直径。
CODE:
#include
#include
#include
#include
#include
#define MAX 20010
using namespace std;
int x,y,z;
int...
分类:
其他好文 时间:
2014-10-04 16:32:56
阅读次数:
242