【树形DP】NOI2003 逃学的小孩

题目大意

题目链接

PS:可能出题人为了提高难度故意加了很多废话……实际上题目是很简单的

在一棵树上找3个点A、B、C,使AB+BC最大,且满足AC>AB。

样例输入

4 3
1 2 1
2 3 1
3 4 1

样例输出

4

思路

从一个点出发,找到两条路径,使路径和最大,那么肯定其中一条是树的直径。

设AB是树的直径,剩下直接枚举,找到一个离直径端点最远的C点。

(A、B、C只是个符号而已,可以随便互换的)

不过还有一个条件是AC>AB,所以枚举的时候,选AC和BC里小的作为第二条路径。

比如AC大,就选BC,此时的路径就是B→A→C,满足AC>AB。

这样此题就完成了,先找出直径,再对直径起点和终点跑出对每个点的路径长度,然后计算答案。

原文地址:https://www.cnblogs.com/Midoria7/p/12659638.html