这题 很多人都是用树形dp进行2次dfs做的...我看了他们的解题报告 并没有完全搞懂=-= 我太白痴了 伤..这边 我的解法 利用了一个很重要的性质---树的直径--树上任意两点间的最远距离而同时 将这个直径上的两点x , y确定后 那么 整个树上结点的dist[ i ]也就可以确定了max( d...
分类:
其他好文 时间:
2014-09-19 23:49:26
阅读次数:
255
1 //Accepted 492 KB 0 ms 2 //树的直径 bfs 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 const int imax_n = 10005; 9 stru...
分类:
其他好文 时间:
2014-09-04 20:47:40
阅读次数:
178
1 //Accepted 740 KB 15 ms 2 //树的直径 3 //距离一个顶点最远的点一定是树的直径的一个端点 4 #include 5 #include 6 #include 7 #include 8 using namespace std; 9...
分类:
其他好文 时间:
2014-09-04 19:00:39
阅读次数:
165
题目大意为,求一个树的直径(最长路),以及直径的数量朴素的dp只能找出某点开始的最长路径,但这个最长路径却不一定是树的直径,本弱先开始就想简单了,一直wa直到我看了某位大牛的题解。。。按照那位大牛的思路,我们来考虑直径的构成:情况1:由某叶子节点出发产生的最长路径直接构成情况2:由某有多个儿子的节点...
分类:
其他好文 时间:
2014-08-26 00:29:05
阅读次数:
313
题目来源:URAL 1752. Tree 2
题意:求一个点v与它距离为d的任意一个点 没有输出0
思路:开始想倍增法 但是倍增法只能往他的祖先去 后来百度发现了树的直径 想了想 发现可以建2棵树 每一棵树的根是树的直径的2个端点
这样保证了每个点和他距离最远的点就是其中一个根 因为一个点到树的直径的端点的距离是最远的 最后就是LCA倍增了
#include
#include
#in...
分类:
其他好文 时间:
2014-08-24 20:53:33
阅读次数:
244
hdu4612:http://acm.hdu.edu.cn/showproblem.php?pid=4612题意:给你一个无向连通图,问加上一条边后得到的图的最少的割边数;题解:首先对原图求割边数,然后缩点之后建树,然后求树的直径。因为加上一条边,能消耗最大的割边就是树的直径。一道很好的模板题目。 ...
分类:
其他好文 时间:
2014-08-16 20:58:41
阅读次数:
200
poj1985:http://poj.org/problem?id=1985题意:就是树的直径。题解:直接DFS即可。 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 const int ...
分类:
其他好文 时间:
2014-08-16 09:40:50
阅读次数:
213
hdu4607:http://acm.hdu.edu.cn/showproblem.php?pid=4607题意:给你一棵树,树上每条边的权值是1,然后然你选择m个点,求遍历m个点的最小花费。题解:这一题要用到树的性质。首先可以想到的是第一次肯定要选择一条最长的路径,也就是树的直径。至于其余的点怎么...
分类:
其他好文 时间:
2014-08-16 09:39:40
阅读次数:
297
对于一棵树,求遍历k个节点的最少步数。先求出直径,若未超过直径,则就是k-1,否则就是 直径 + 2 * (k - 直径 - 1)。#include #include #include #include using namespace std;#define maxn 100100#define m...
分类:
其他好文 时间:
2014-08-14 00:54:57
阅读次数:
483
n个点,m条边的森林,q次操作。每次操作:1、询问x所在树的直径 2、合并x和y所在的树,使得合并后的直径最小...
分类:
其他好文 时间:
2014-08-12 13:42:34
阅读次数:
165