樹型DP 例題分析

2021-10-06 03:37:00 字數 2783 閱讀 7819

樹型dp,就是在樹上進行的dp。由於樹固有的遞迴性質,樹型dp一般都是遞迴進行的。

通過兩個經典例題感受一下。

例1:「沒有上司的舞會」問題

公司共有n(n≤6000)位員工。公司要舉行乙個舞會。 為了讓到會的每個人不受他的直接上司約束而能玩得開心,公司領 導決定:

如果邀請了某個人,那麼一定不會再邀請他的直接的上司,但 該人的上司的上司,上司的上司的上司……都可以邀請。

已知每個人最多有唯一的乙個上司。(該模型就是乙個樹型模型)

公司的每個人參加晚會都能為晚會增添一些氣氛,求乙個邀請方案, 使氣氛值的和最大。

定義狀態:

• 定義 f[i][0/1] 表示以 i 為根節點的子樹所能得到的最大的氣氛值。

• f[i][0] 表示以 i 為子樹且未選擇 i 號節點;

• f[i][1] 表示以 i 為子樹且選擇了 i 號節點

• 最終答案就是 max(f[root][0], f[root][1])

狀態轉移過程:

• 上司不參加,下屬可以參加,也可以不參加。 • 上司參加,下屬只能不參加。

• 列舉量x為當前節點i到能直接到達的所有的子節點。

**:使用了鏈式前向星建樹。

#include

#include

#include

#define inf 99999999

using

namespace std;

int n,m;

int w[

6010

],d[

6010

],head[

6010

],f[

6010][

5];struct edgee[

6010];

int cnt;

void

add(

int u,

int v,

int w)

void

solve

(int u)

for(

int i=head[u]

;i;i=e[i]

.next )

f[u][1

]+=w[u];}

intmain()

int root;

for(

int i=

1;i<=n;i++)if

(d[i]==0

)solve

(root)

;int ans=

-inf;

ans=

max(f[root][0

],f[root][1

]);printf

("%d\n"

,ans);}

return0;

}

例2:

有一棵樹(n≤1e5),樹上每個節點都是一座房子,房子裡有人, 樹的每條邊都有乙個權值(距離),所有人都要去別人家玩(通過

最短路徑), 有兩個要求: • 1. 所有人都要去別人的房子(不能不動) • 2. 不能同時有兩個人去同乙個房子 • 求這些人移動距離總和的最大值 。

41 2 3

2 3 2

4 3 2

ans=18

單獨考慮每一條邊。 • 利用樹的性質,我們可以得知,一條邊將一棵樹劃分為兩個部分。 • 假定這條邊的權值為w,兩側兩個部分的節點個數分別為m1和m2。 • 每一條邊最多經過多少次? • 假設一邊比另一邊少,那麼就讓這些節點全部到另一邊去,這樣的 答案一定是最優的。

怎樣獲取對於每個邊而言的m1和m2?

• 假定這個樹是一棵有根樹。 • 有根樹的每條邊一定是父親->兒子的關係。 • 對於這條邊,m1為以兒子為根的子樹的節點數量。 • (m2 = n - m1) • m1在遞迴的過程中不斷計算即可。

本題是hdu-4118。因為遞迴棧不夠大,需要手動增大。

**:

#pragma comment(linker,"/stack:102400000,102400000")

#include

#include

#include

using

namespace std;

int t,n;

long

long ans;

int vis[

100010

],head[

100010];

intmin

(int a,

int b)

struct edgee[

200010];

int cnt;

void

add(

int u,

int v,

int w)

intdfs

(int u)

}return tmp;

}int

main()

dfs(1)

;printf

("case #%d: %lld\n"

,t,ans);}

return0;

}

樹型DP入門

題意 某公司要舉辦一次晚會,但是為了使得晚會的氣氛更加活躍,每個參加晚會的人都不希望在晚會中見到他的直接上司,現在已知每個人的活躍指數和上司關係 當然不可能存在環 求邀請哪些人 多少人 來能使得晚會的總活躍指數最大。思路 任何乙個點的取捨可以看作一種決策,那麼狀態就是在某個點取的時候或者不取的時候,...

樹型DP 選課

大學裡實行學分。每門課程都有一定的學分,學生只要選修了這門課並考核通過就能獲得相應的學分。學生最後的學分是他選修的各門課的學分的總和。每個學生都要選擇規定數量的課程。其中有些課程可以直接選修,有些課程需要一定的基礎知識,必須在選了其它的一些課程的基礎上才能選修。例如,資料結構 必須在選修了 高階語言...

樹型DP 皇宮看守

太平王世子事件後,陸小鳳成了皇上特聘的御前一品侍衛。皇宮以午門為起點,直到後宮嬪妃們的寢宮,呈一棵樹的形狀 有邊直接相連的宮殿可以互相望見。大內保衛森嚴,三步一崗,五步一哨,每個宮殿都要有人全天候看守,在不同的宮殿安排看守所需的費用不同。可是陸小鳳手上的經費不足,無論如何也沒法在每個宮殿都安置留守侍...