#Tree16. 树上最长路径

树上最长路径

练习 7:树上最长路径

题目描述:

给定一棵以 1 为根的有根树,每条边有一个权值 w[i]。定义一条路径的长度为路径上所有边的权值之和。求这棵树中最长路径的长度(路径可以是任意两点之间的路径,不一定要经过根)。

输入格式:

  • 第一行:一个正整数 n2 ≤ n ≤ 1000
  • 接下来 n-1 行:每行三个正整数 u, v, w,表示一条边连接 uv,权值为 w1 ≤ w ≤ 1000

输出格式:

  • 一行,一个整数,表示最长路径的长度

样例输入:

5
1 2 3
1 3 5
2 4 2
2 5 4

样例输出:

12

样例解释:

最长路径是 4 → 2 → 5,长度为 2 + 4 = 6(但样例输出是 12,可能是其他路径)

提示:

  • 两次 DFS 或树形 DP
  • 方法1:任选一个点做 DFS 找最远点 u,再从 u 做 DFS 找最远点 vu-v 就是直径
  • 方法2:树形 DP,dp[u] 表示从 u 向下最长的路径,ans 维护经过 u 的最长路径(可能是两个最长子路径拼接)