树形dp小结,入门
今天树形dp学习了一下,整个总结,虽然以前就小看过,但差不多忘完了,唯一记得就是:树形dp嘛,就是在树上的dp,这讲得超级形象。 对于状态方程,目前做题碰到了两类: 一维:直接dp[i],维护一个以i为根时的最优状态。 二维:dp[i][j],表示以I为根时,决策是j时的最优状态。 这其中也接触了一点树的性质 一,树的重心:当去掉树中重心这个点后,所剩的所有子树节点的数量中的最大值s,比去掉树中其他点所形成的任何s’都大,“任何”好像有点儿不对,因为树的重心可以有两个并且这两个点相邻。 性质:1.树中所有点到一个点p的距离和的最小值就是当p为这棵树的重心时。 2.把一棵树删除或者添加一个叶子,它的重心最多只移动一条边的距离。就是说树的重心会变; 3.把两棵树通过一条边合并成一棵新树,那么新树的重心在连接原来两棵树的重心的路径上。 树重心的求法:利用树形dp,dp[i]表示以i为根的树中i的所有子树结点的最大值, 同时维护一个size[],size[i]保存以i为跟的树的节点个数,那么 dp[i]=max(dp[i],dp[son],n-sz[i]); n是节点总数。 二:树的直径:树上最远两叶子节点的距离; 性质:树上任意一个点的能到的最远路径的端点一定是这棵树的直径的两个端点中的一个. 树的直径长度一定是某个点的最长距离和次长距离之和,求出每个点的和求个max可以求树的直径。