(牛客网)树型dp
樹型dp
視頻鏈接
(如果想購買網(wǎng)課,可以用我的邀請碼)
用我的鏈接購買,我再反你10,一共花54多值
購買鏈接
不放心可以先加我好友2830872914
總試題鏈接
文章目錄
- 樹型dp
- 例題
- NC15033 小G有一個大樹
- NC511788 沒有上司的舞會(最大獨(dú)立集)
- poj1463 NC106060 Strategic game(樹的最小點覆蓋)
- NC24953 CellPhoneNetwork(樹的最小支配集)
- 以上小總結(jié):
- NC50505 二叉蘋果樹
- 延伸-->多叉樹情況
- NC202475 樹上子鏈(樹的直徑)
- NC22598 Rinne Loves Edges
- NC210473 吉吉王國
- 習(xí)題
- NC13249 黑白樹
- NC15748 旅游
- NC19782 Tree
- NC200547 劃分樹
- NC201400 樹學(xué)
- NC20811 藍(lán)魔法師
- NC51179 選課
- NC51180 Accumulation Degree
例題
NC15033 小G有一個大樹
題解鏈接
樹的重心定義為:樹中的一個點,刪掉該點,使剩下的樹所構(gòu)成的森林中最大的子樹節(jié)點數(shù)最少。
dp[i]=max(n-tot[i],max(tot[k]))
NC511788 沒有上司的舞會(最大獨(dú)立集)
題解鏈接
dp[i][0]不選i點時,i點及其子樹能選出的最大快樂指數(shù)
dp[i][1]表示選擇i點時,i點及其子樹的最大快樂值
狀態(tài)轉(zhuǎn)移:
dp[i][0]=∑(max dp[j][0],dp[j][1])//當(dāng)i點不選時,兒子選與不選
dp[i][1]=∑dp[j][0]+Hi//選了父親,不能選兒子
(j是i的兒子)
邊界:dp[i][0]=0 dp[i][1]=hi
結(jié)果:max(dp[root][0],dp[root][1])
本質(zhì):兒子與父親不能同時選
poj1463 NC106060 Strategic game(樹的最小點覆蓋)
題解鏈接
試題:一個樹,在一個節(jié)點放兵,周圍的邊就被守護(hù),守護(hù)所有的邊,問最少放多少兵
確定狀態(tài):
dp[x][1]以x為根的子樹全被看住且在x上放置士兵的最少所需的士兵數(shù)量
dp[x][0]以x為根的子樹全被看住且在x上沒有 放置士兵的最少所需的士兵數(shù)量.
確定狀態(tài)方程:
dp[x][1]=1+∑min(dp[i][0],dp[i][1])//x上放了士兵,x的兒子們可放可不放
dp[x][0]=∑dp[i][1]//如果x不放士兵,x的兒子必須放
結(jié)果min(dp[root][0],dp[root][1])
i是x的兒子
相當(dāng)于我們在考慮x點時,x的子節(jié)點都是被考慮完的,x能否被覆蓋完全取決于自身或x的兒子
NC24953 CellPhoneNetwork(樹的最小支配集)
題解鏈接
最少用多少個點可以覆蓋掉所有其他點
確定狀態(tài):
dp[x][0]:選點i,并且以點i為根的子樹都被覆蓋
dp[x][1]:不選i,i被其兒子覆蓋
dp[x][2]:不選點i,i被其父親覆蓋(此時兒子可選可不選)
轉(zhuǎn)移方程:
dp[i][0]=1+∑min(dp[u][0],dp[u][1],dp[u][2])(u是i的兒子)
被兒子被自己被父親覆蓋
dp[i][2]=∑(dp[u][1],dp[u][0])
i被父親覆蓋,u是i的兒子,u 可選可不選,但是u肯定不會被i所覆蓋
對于dp[i][1]情況,i的兒子們中必須有一個取dp[u][0]
if(i沒有子節(jié)點)dp[i][1]=INF
else dp[i][1]=∑min(dp[u][0],dp[u][1])+inc
對于inc
if(∑min(dp[u][0],dp[u][1])中包含某個dp[u][0])inc=0
else inc=min(dp[u][0]-dp[u][1])
選與不選
圖一是自然被選
圖二是強(qiáng)制選擇
以上小總結(jié):
最小點覆蓋
每個點附近周圍的邊
最大獨(dú)立集
父親與兒子不能同時選,選最多的點
最小支配集
每個點附近周圍的點
把子樹當(dāng)做一個整體
NC50505 二叉蘋果樹
詳細(xì)題解
一棵二叉蘋果樹,且一定分二叉, 給定需要保留的樹枝數(shù)量,求最多能留住多少蘋果
確定狀態(tài):
dp[u][v]以u為根的子樹保留j個分支可以得到的最大蘋果數(shù)量
左右兒子都在
左子樹砍了
三種情況:
只保留左
dp[u][j]=dp[l][j-1]+a[j][l]
只保留右
dp[u][j]=dp[r][j-1]+a[j][r]
左子樹保留x個,右子樹保留j-2-x個
dp[u][j]=dp[l][x]+dp[r][j-2-x]+a[j][l]+a[j][r]
a是指每條邊的蘋果樹數(shù)量
延伸–>多叉樹情況
不斷將一個子樹合并到左子樹里,始終處理的只有兩個子樹
強(qiáng)行當(dāng)做二叉樹處理
樹上背包
dp[u][j]=max(dp[u][k]+dp[v][j-k-1]+w)
v是u的子節(jié)點,k∈[0,j]
w=a[u][v]//u與v之間的邊權(quán)
(發(fā)現(xiàn)該公式類似于背包)
NC202475 樹上子鏈(樹的直徑)
詳細(xì)題解
每個點有點權(quán)
樹的子鏈大小的這個子鏈上所有結(jié)點的權(quán)值和
在樹T中找到最大的子鏈
樹的直徑:兩邊dfs
點權(quán)與邊權(quán)轉(zhuǎn)換
NC22598 Rinne Loves Edges
詳細(xì)題解
題意:
n個節(jié)點m條邊的無向連通圖(為樹,m=n-1)
選取一個點S,然后刪除一些邊,使得原圖中所有除S之外度為1的點都不能到達(dá)S(讓葉子節(jié)點和根節(jié)點不通)
刪邊的費(fèi)用為邊的權(quán)值
可以跑網(wǎng)絡(luò)流,全局最小割
樹的話,沒必要
考慮x點的子樹上每個葉子都與s不連通
兩種情況:
把x和他的兒子斷開
在x的子樹上取把所有葉子節(jié)點斷開
dp[x]表示x的子樹上的所有葉子和根斷開的最小代價
dp[x]=∑(min(dp[y],dis[x][y]))
y是x的兒子
NC210473 吉吉王國
詳細(xì)題解
題目:
一棵無向樹,切掉一些邊,切斷的邊的權(quán)值不能超過m,使得葉子節(jié)點與根節(jié)點(1號)分離,要使得切斷的邊中最大的邊權(quán)要盡可能小
最大值最小:二分
去二分最長能切的邊
二分+判定
如果可以切就切斷,如果x到y(tǒng)的邊切不斷(x是y的父親節(jié)點),那就切y子樹里面的節(jié)點,一直向下
習(xí)題
題目鏈接
NC13249 黑白樹
NC15748 旅游
NC19782 Tree
NC200547 劃分樹
NC201400 樹學(xué)
NC20811 藍(lán)魔法師
NC51179 選課
NC51180 Accumulation Degree
總結(jié)
- 上一篇: 资本主义是什么意思 什么是资本主义
- 下一篇: 【每日一题】8月4日题目精讲—购物