显然,题目的意思是在图中找一个连通块,使得某个连通块权和最大。
f[i]表示i为根,并且i一定要取情况下,一个连通块的最大权和
显然f[i]=sum(f[son[i]] f[son[i]]>0 ) +w[i]
因为i一定取的话,f[i]至少为w[i]自己的权值
查看自己的儿子所属于的连通块,如何儿子的连通块的权和为正数,那么加入进来一定可以更优。
如果儿子所属的连通块的和是负数,那么加进来一定悲剧。
所以得到上述转移方程。
空间复杂度O(n)
时间复杂度O(n)
[编辑] 参考代码
C
C++
Pascal