题目大意:n 个人形成一个关系树,每个节点代表一个人,节点的根表示这个人的唯一的直接上司,只有根没有上司。要求选取一部分人出来,使得每 2 个人之间不能有直接的上下级的关系,
求最多能选多少个人出来,并且求出获得最大人数的选人方案是否唯一。
解题思路:分析发现是要求一个树的最大独立集。这里可以用树形 DP 解决。
定义dp【x】【0】:表示在 i 点不选 i 点的以 x 为子树的最大独立集 而dp【x】【1】 表示x到场的最大独立集
定义f 【x】【0】:表示以x为根且x点不选的子树是否唯一 ,f【x】【1】表示以x为根且x选的子树是否唯一
状态转移方程:dp [ x ] [ 1 ] + = dp [ child ] [ 0 ] ;
dp [ x ] [ 0 ] + = max ( dp [ child ] [ 0 ] , dp [ child ] [ 1 ] );
而判断唯一性的方程一样的。
?
#include
#include
#include
#include
#include