|
|
|
@ -590,9 +590,9 @@ $$\large f_1[u]=c[u]+\sum_{fa[v] = u}max(f_1[v],0)$$
|
|
|
|
|
|
|
|
|
|
考虑$f_2[u]$的组成:一部分是以其为根的子树,即$f_1[u]$;另一部分即是在全局中将其子树挖掉后剩下的部分。这两部分互相独立,分别取最大值即可。
|
|
|
|
|
|
|
|
|
|
考虑第二部分的计算:记$v$的父节点为$u$,若$st[v]=1$,则说明其包含在$f1[u]$中,故这一部分即为$f2[u]-f1[v]$;若$st[v]=0$,即其不包含在$f1[u]$中,则这一部分为$f1[u]$。最后将这一部分的值与$0$取$max$即可。
|
|
|
|
|
考虑第二部分的计算:记$v$的父节点为$u$,若$st[v]=1$,则说明其包含在$f_1[u]$中,故这一部分即为$f_2[u]-f_1[v]$;若$st[v]=0$,即其不包含在$f_1[u]$中,则这一部分为$f_1[u]$。最后将这一部分的值与$0$取$max$即可。
|
|
|
|
|
|
|
|
|
|
所以整个算法只需要两遍$dfs$,第一遍自底向上计算出$dp$数组,第二遍以$f[1]$(强制$1$为根节点)自上向下计算出$f$数组,即为答案。
|
|
|
|
|
所以整个算法只需要两遍$dfs$,第一遍自底向上计算出$f_1$数组,第二遍以$f_2[1]$(强制$1$为根节点)自上向下计算出$f_2$数组,即为答案。
|
|
|
|
|
|
|
|
|
|
[USACO12FEB]Nearby Cows G
|
|
|
|
|
|
|
|
|
|