树的最大独立集:对于一颗n个节点的无根树,给出n-1条遍,选出尽量多的节点,使得任何两个节点均不相邻。输出一个最大独立集
分析:
d[i]:表示以i为节点的子树的最大独立集大小。
那么对于每个节点j. 取或者不取。 取j则j的孩子不能取,不取j则j的孩子可以取;
那么问题转化成了:取节点j,求出j的所有孙子的d值之和再+1。 不取j,求出j的所有儿子的d值之和
转移方程:d[j]=max(Cmax[j],Smax[j]+1); Cmax,Smax分别是j的孩子跟孙子的dp和。
分析之后,就容易解决问题了。
将无根树以节点i(枚举每个节点)转化为有根树。求出每个节点对应层次以及最大层次,并且求出每个节点的父亲节点(非根节点)
然后再从最大层次(叶子)开始枚举到根。那么此时便计算出来d[i