码迷,mamicode.com
首页 > 其他好文 > 详细

Test

时间:2019-08-04 19:29:06      阅读:84      评论:0      收藏:0      [点我收藏+]

标签:test   完全   class   row   子节点   根据   tar   状态   span   

题意:

一棵\(n\)个点的树,询问每个点距离其他点的最远距离。

分析:

距离这个点的最远距离点无非有两种情况,一种在这个点的子树中,一种是在这个点的父亲节点往上走的点。
\(dp[u][0]\)表示\(u\)节点子树中的最远距离
\(dp[u[1]\)表示\(u\)节点子树中的次远距离
\(dp[u][2]\)表示不在\(u\)节点子树中的最远距离
\(u\)\(v\)的父节点,则有状态转移方程:
\(I.\)叶子节点\(\rightarrow\)根节点
\(dp[u][1]=dp[u][0],dp[u][0]=dp[v][0]+w,if(dp[x][0]<dp[v][0]+w)\)
\(dp[u][1]=max(dp[u][1],dp[v][0]+w),if(dp[x][0]<=dp[v][0]+w)\)
\(II.\)根节点\(\rightarrow\)叶子节点
\(dp[v][2]=max(dp[u][2]+w,dp[u][1]+w),if(dp[v][0]+w=dp[u][0])\)
\(ps:\)这个方程表示\(v\)\(u\)的最长链上
\(dp[v][2]=max(dp[u][2]+w,dp[u][1]+w),if(dp[v][0]+w =\not dp[u][0])\)
这个则否。
\(I.\)中是更新每个节点的子树的最大值和次大值。
\(II.\)有了子树的最大值和次大值就能完全确定最大值。
得用次大值的原因是:有可能一个节点就在他的父亲节点的最长链上,所以就不能根据父亲节点的最长链来转移而是父亲的次长链。

Test

标签:test   完全   class   row   子节点   根据   tar   状态   span   

原文地址:https://www.cnblogs.com/ChaseNo1/p/11299031.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!