树形DP
树形DP是什么,就是在树上跑DP!
树形DP就不像背包那么僵硬了
之前背包弄懂题意,理解透彻,套模板后就差不多了,但是树形DP可不这样
如果说背包是人,那么树形DP就是狗 !
呸呸呸,不是这样的,如果说背包是 X I A N G ,那么树形DP就是 X I A N G 中豪杰 !
呃——————!!!
其实差不多的,我第一个比喻着重放在
灵敏度
而不是
种类等级
谢谢~~
树形DP入门
给定一颗有N个节点的树(一般是无根树,就有N-1条无向边),可以任选一个节点作为根节点
一般以 节点从深到浅 子树从小到大 的顺序作为dp阶段顺序
dp的状态表示中,第一维通常是节点编号(节点编号代表了以该节点为根的子树)
对于每个节点x,先递归在它的每个子节点上进行dp,回溯时,从子节点向x进行状态转移
比赛
-
A题:
典型树形DP,但是有3个状态:
1、自己选。2、不选。然后不选又有两个状态,分为爸爸覆盖和儿子覆盖。贪心就DFS序倒着跑一边,然后判断。
P.S.注意贪心要倒着来!!!如果不倒着来,就要判断他儿子的状态,那就是DP啦!!!
-
B题:
B就有点难度啦!两种解法:大佬解法并查集,3种,全段0,全段1,前段0后段1。
然后是树形DP解法,二次换根来做
-
C题:
树型DP+背包问题f[ i ] j 表示以 i 为根结点有 j 个结点子树的最大权值