hdu3534:tree:树的直径问题(dp求解)

题目连接

  • 树形DP专题

题目大意

  • 给出一棵带边权的树;
  • 问1:求出树的直径;
  • 问2:有多少对点的距离等于树的直径。

题目分析

  • 直径的定义: 树上最长的链(可能有多条)。
  • 求树的直径的方法1:用两次dfs来完成
    dfs1从根出发,找到最远的叶子结点 k k k
    dfs2以 k k k 为根,出发,找到离他最远的点 t t t k k k t t t 之间的距离就是直径。
  • 求直径的做法2:dp的思维来实现
    从根出发,搜索的过程中,同时记录最长链与次长链,回溯的时候更新。
  • 本题解抄的就是方法2,而且更巧妙的是,用一个缓存 t m p tmp tmp 来记录可能最长链,节省了一丁点的空间。

解题流程

  • 从根,开始搜索:
  • 回溯到 x x x 的时候 5 个操作:
    • 1 用 t m p tmp tmp 记录经过 y y y 的最长链长度:
      t m p = l e n [ y ] + e ( x , y ) ; tmp=len[y]+e(x,y); tmp=len[y]+e(x,y); 其中 e ( x , y ) e(x,y) e(x,y) ( x , y ) (x,y) (x,y) 之间的边长;
    • 2 如果 a n s <
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值