一颗树 $n$ 个点,$n-1$ 条边,经过每条边都要花费一定的时间,任意两个点都是联通的。
设$f[x]$,$x$这个子树的所有关键点到$x$一来一回需要的路程。
$dis[x]$,表示最长的$x$与关键点最长距离。
显然对于根$ans[rt]=dp[rt]-dis[rt]$
考虑如果转移$x\rightarrow to\$
如果$siz[to]=k$
表示不需要做任何处理
但是注意如果$x$子树没有关键点
这个很好理解。
$up[x]$表示外子树最长的$x$与关键点最长距离
更新的时候只要注意下要更新原来$x$子树的最大还是次大值。
代码
1 |
|