meeting (换根DP, 树直径)

 

 

思路 1 换根DP:

  •  第一次dfs 预处理出每一个儿子树的 最长距离1 和次长距离2
  •  第二次开始换根DP, 本点到其他 点的距离最长 : 分别考虑 一个是父亲上下来的点len3, 一个是兄弟节点, 就是父亲的最长距离len1或者 次长距离len2,
  • 根本不用换根dp, 直接就是每一个点 的 最长+第二长即可,  因为前面的情况, 已经包含完了 
  • 当然这道题要 k个人所在的节点才会产生权值

思路2 树上直径:

  • 概念: 任意2个点的距离的最长距离
  • 如何求: 谁便选一个点然后dfs找到一个最远的距离的点, (这个点就是直径的端点)
  • 然后在以这个点来dfs 在找一个点, 这个点就是直径的另一个端点
  • 然后 直径/2 就ok
  • 为什么是 直径/2的点, 反证法: 因为如果不是这个点, 那么那个点到这个直径的2个端点, 产生的权值就会大于本来应该的那个点产生的权值
  • 在枚举每一个
  • 同理 当然这道题要 k个人所在的节点才会产生权值 
posted @ 2023-04-17 16:32  VxiaohuanV  阅读(33)  评论(0编辑  收藏  举报