背景
(2012) 福建省信息学奥林匹克 (CCF) (NOIP) 夏令营第八天训练 (T1) , (Luogu) (P1352)
题意
给定 (n-1) 个人的父亲及 (n) 个人的权值 (val_i) 。规定一个人的上司与本人不能同时选。求最大权值和。输入以 (0) (0) 结束。
解法
树形 (dp) 模板。
由于树形结构本身满足最优子结构性质,自然地,我们设 (f_{i,0/1}) 来表示第 (i) 个节点选中/不选时以 (i) 为根的子树内最大权值和。
设 (x) 节点的儿子集合为 ({ son_x }) 则转移方程有 (f_{x,1}=sum_limits{y in { son_x } } min { f_{y,0},f_{y,1} },f_{x,0}=sum_limits{y in { son_x } } f_{y,1}+val_x) ,要求的就是(max { f_{root,0},f_{root,1} }) 。
细节
为了求出子节点的正确 (dp) 值,应当先递归 (dp) 子节点再更新父节点的 (dp) 值。
(trick)
由于给出的是一棵有根树,需要遍历找到一个无父亲的节点作为根( (root) )开始 (dp) 。