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