标签: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 完全 class row 子节点 根据 tar 状态 span
原文地址:https://www.cnblogs.com/ChaseNo1/p/11299031.html