首页 新闻 会员 周边 捐助

请问一下这道题怎么做?要有解析谢谢!(树形动态规划)

0
悬赏园豆:180 [待解决问题]

题目描述:
给出 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的过程中不断的去更新
一些有用的信息。

Fg比较好计算,但是做出结果还有一点差距。
其实做dfs时候,只要记录走到当前的时候,到x
个点的最长路径是多长,和这个点之上的部分里面
最长的路径是多长,然后就可以转移了,也可以
O(1)
的计算结果了。
具体就自己YY吧,不多说了

可是我还是不会做,请教一下各位大神,谢谢!

沐灵_hh的主页 沐灵_hh | 初学一级 | 园豆:5
提问于:2017-08-28 20:25
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册