CF競賽題目講解_CF274B(樹形DP+深度優(yōu)先遍歷)
2022-09-06 16:12 作者:Clayton_Zhou | 我要投稿
?https://codeforces.com/problemset/problem/274/B
題意:
已知一棵樹,樹上每個節(jié)點(diǎn)都有一個值,可以
1.每次選擇樹上包含節(jié)點(diǎn)1(根節(jié)點(diǎn))的一個子樹;
2.每次選擇的子樹進(jìn)行所有節(jié)點(diǎn)值+1或-1的操作,
問要使所有節(jié)點(diǎn)的值都變?yōu)?,最少需要多少次操作?
題解:
樹形DP + 深度優(yōu)先遍歷,
對于一個節(jié)點(diǎn)來說所需要的操作步數(shù),就是increase操作和decrease操作的和.?
可以設(shè)dp[u][0]表示increase操作的步數(shù),dp[u][1]表示decrease操作的步數(shù),
這樣就可以進(jìn)行轉(zhuǎn)移了.
對于每個節(jié)點(diǎn),先求出其所有兒子節(jié)點(diǎn)的dp,就可以推算出使它變成0最少需要增加多少次,減少多少次,即可完成狀態(tài)轉(zhuǎn)移。
標(biāo)簽: