题目描述:
给出 N 个点,N-1 条边的连通图.
现要求删除一条边,使得连通块的直径总和最大.所谓连通块的直径是指连通块中最远两
点之间的距离。
问:直径总和最大是多少?
输入:
文件名为 delete.in
第一行正整数 N.
接下来 N-1 行.每行两个数,A,B,LEN 表示 A,B(1<=A,B<=N)有一条长度为 Len(1<=Len<=1000)
的边连接着.
输出:
文件名为 delete.out
一个数 Ans.直径总和的最大值.
样例输入:
10
2 1 982
3 1 169
4 1 934
5 1 325
6 1 735
7 1 675
8 2 302
9 3 450
10 5 173
样例输出:
2668
数据范围:
30% N<=100
70% N<=5000
100% N<=100000
这是原文的解析:
树形的dp,首先计算f[x]表示x这棵子树的直径, g[x]表示x
这棵子树中以x作为开始的最长的一条路径。
F和g怎么计算自己研究,不用多说了。
之后就只需要再做一次dfs,然后找到某个点就判断这个点
下面某条边去掉以后的结果(利用f和g)。
可能还是不会做,提示一下,在dfs的过程中不断的去更新
一些有用的信息。
F和g比较好计算,但是做出结果还有一点差距。
其实做dfs时候,只要记录走到当前的时候,到x这
个点的最长路径是多长,和这个点之上的部分里面
最长的路径是多长,然后就可以转移了,也可以O(1)
的计算结果了。
具体就自己YY吧,不多说了
可是我还是不会做,请教一下各位大神,谢谢!