http://codeforces.com/contest/743/problem/D 如果我们知道mx[1]表示以1为根节点的子树中,点权值的最大和是多少(可能是整颗树,就是包括了自己).那么,就可以O(n)扫一次各个点,对于每个点的儿子. 选出最大的两个mx[son],更新答案即可.(注意这个节点只有1个或者没有儿子,就要是-inf) 那么怎么得到这个mx[]呢? 可以知道mx[father] = max(所有的mx[son]) 最后还要看看是否能选择整个树,所以用dp[cur]表示以cur…