CF竞赛题目讲解_CF274B(树形DP+深度优先遍历)
2022-09-06 16:12 作者:Clayton_Zhou | 我要投稿
https://codeforces.com/problemset/problem/274/B
题意:
已知一棵树,树上每个节点都有一个值,可以
1.每次选择树上包含节点1(根节点)的一个子树;
2.每次选择的子树进行所有节点值+1或-1的操作,
问要使所有节点的值都变为0,最少需要多少次操作?
题解:
树形DP + 深度优先遍历,
对于一个节点来说所需要的操作步数,就是increase操作和decrease操作的和.
可以设dp[u][0]表示increase操作的步数,dp[u][1]表示decrease操作的步数,
这样就可以进行转移了.
对于每个节点,先求出其所有儿子节点的dp,就可以推算出使它变成0最少需要增加多少次,减少多少次,即可完成状态转移。