1. 最 大 独 立 集 \large1.最大独立集 1.

选出最多的点,使得所有点都是不相邻的

状态表示: d p i , j dp_{i,j} dpi,j 表示以 i i i 为根的树,如果 j j j 0 0 0 ,表示不选这个点,如果 j j j 1 1 1,表示选这个点

属性: Max \text{Max} Max

状态计算:

如果当前点 i i i 不选,那么子节点 j j j 可以被选或不被选:

d p i , 0 = ∑ k = 1 n max ⁡ ( d p j k , 0 , d p j k , 1 ) dp_{i,0}=\sum_{k=1}^{n}\max (dp_{j_k,0},dp_{j_k,1}) dpi,0=k=1nmax(dpjk,0,dpjk,1)

如果当前点 i i i 被选,那么子节点 j j j 一定不能被选:

d p i , 1 = ∑ k = 1 n d p j k , 0 dp_{i,1}=\sum_{k=1}^{n}dp_{j_k,0} dpi,1=k=1ndpjk,0

AcWing \text{AcWing} AcWing 285 285 285 没有上司的舞会(带点权)

2. 最 小 点 覆 盖 \large 2.最小点覆盖 2.

选出最少的点,覆盖所有的边

状态表示: d p i , j dp_{i,j} dpi,j 表示以 i i i为根的树,如果 j j j 0 0 0 ,表示不选这个点,如果 j j j 1 1 1 ,表示选这个点

属性: Min \text{Min} Min

状态计算:

如果当前点 i i i 不选,那么子节点 j j j 一定被选:

d p i , 0 = ∑ k = 1 n d p j k , 1 dp_{i,0}=\sum_{k=1}^{n} dp_{j_k,1} dpi,0=k=1ndpjk,1

如果当前点 i i i 被选,那么子节点 j j j 可以被选或者不选:

d p i , 1 = ∑ k = 1 n min ⁡ ( d p j k , 0 , d p j k , 1 ) dp_{i,1}=\sum_{k=1}^{n} \min (dp_{j_k,0},dp_{j_k,1}) dpi,1=k=1nmin(dpjk,0,dpjk,1)

AcWing \text{AcWing} AcWing 323 323 323 战略游戏(带点权)

3. 最 小 支 配 集 3.最小支配集 3.

选出最少的点,使得每个点要么被选、要么被它的相邻点支配

状态表示: d p i , j dp_{i,j} dpi,j 表示以 i i i为根的树,如果 j j j 0 0 0,表示在点 i i i不被支配,且将要被父节点支配,如果 j j j 1 1 1,表示在点 i i i 不被支配,且将要被子节点支配,如果 j j j 2 2 2,表示在点 i i i 支配

属性: Min \text{Min} Min

状态计算:

如果当前点 i i i 要被父节点支配,那么可以选择子节点或者选择该节点:

d p i , 0 = ∑ k = 1 n min ⁡ ( d p j k , 1 , d p j k , 2 ) dp_{i,0}=\sum_{k=1}^{n}\min(dp_{j_k,1},dp_{j_k,2}) dpi,0=k=1nmin(dpjk,1,dpjk,2)

如果当前的点 i i i 要被子节点支配,那么就要枚举是哪个子节点 j j j 被选的方案最小( u k u_k uk 代表子节点的第 k k k 个子节点):

d p i , 1 = min ⁡ ( d p i , 1 , d p j k , 2 + d p i , 0 − ∑ k = 1 n min ⁡ ( d p u k , 1 , d p u k , 2 ) ) dp_{i,1}= \min( dp_{i,1},dp_{j_k,2}+dp_{i,0}-\sum_{k=1}^{n}\min (dp_{u_k,1},dp_{u_k,2})) dpi,1=min(dpi,1,dpjk,2+dpi,0k=1nmin(dpuk,1,dpuk,2))

如果选当前的点 i i i,那么子节点 j j j i i i 支配,或者选择子节点 j j j,或者子节点 j j j 被子节点的子节点 u u u 支配:

d p i , 2 = ∑ k = 1 n min ⁡ ( d p j k , 0 , d p j k , 1 , d p j k , 2 ) dp_{i,2}=\sum_{k=1}^{n}\min(dp_{j_k,0},dp_{j_k,1},dp_{j_k,2}) dpi,2=k=1nmin(dpjk,0,dpjk,1,dpjk,2)

SDUT \text{SDUT} SDUT 4831 4831 4831 树的染色

AcWing \text{AcWing} AcWing 1077 1077 1077 皇宫看守(带点权)

参考文献:

AcWing算法提高课

树上dp的一些总结

没有上司的舞会题解(小呆呆)

战略游戏题解(小呆呆)

皇宫看守题解(小呆呆)

SDUT \text{SDUT} SDUT 4831 4831 4831 树的染色题解(lxw)