樹形DP 經典例題 沒有上司的舞會

2021-09-26 08:56:10 字數 1359 閱讀 2358

一般樹形dp題目中都是其中某種狀況如果想要發生必須先完成先決條件

如 這道舞會題,要保證職員去參加舞會的話,必須滿足他的直接上司不去

還有的占領城堡的題,要占領乙個城堡必須先占領另乙個城堡。

看到這樣的情況就考慮一下樹形dp

題目描述:

ural大學有n個職員,編號為1~n。他們有從屬關係,也就是說他們的關係就像一棵以校長為根的樹,父結點就是子結點的直接上司。每個職員有乙個快樂指數。現在有個周年慶宴會,要求與會職員的快樂指數最大。但是,沒有職員願和直接上司一起與會。

輸入:

第一行乙個整數n。(1< =n< =6000) 接下來n行,第i+1行表示i號職員的快樂指數ri。(-128< =ri< =127) 接下來n-1行,每行輸入一對整數l,k。表示k是l的直接上司。 最後一行輸入0,0。

輸出:輸出最大的快樂指數。

樣例輸入:71

1111

111 32 3

6 47 4

4 53 5

0 0樣例輸出:

5

#include

#include

#include

#include

using namespace std;

int n,t,d[

6001

],h[

6001

],cnt,head[

6001

],dp[

6001][

2];//dp[x][0]表示當x不去時,他極其子樹的最大快樂指數 dp[x][1]表示當x去時,他極其子樹的最大快樂指數 d陣列是為了尋找根節點 h陣列是儲存快樂指數

struct edge

edge[

6001];

void

add(

int a,

int b)

//鏈式向前星存圖模板

void

dfs(

int x)

dp[x][1

]+=h[x]

;//x去,則加上自身的快樂指數

}int

main()

for(

int i=

1;i<=n;i++

)dfs

(t);

printf

("%d"

,max

(dp[t][0

],dp[t][1

]));

//最後判斷出最大值

}

沒有上司的舞會 樹形DP 經典題目

ural大學有n個職員,編號為1 n。他們有從屬關係,也就是說他們的關係就像一棵以校長為根的樹,父結點就是子結點的直接上司。每個職員有乙個快樂指數。現在有個周年慶宴會,要求與會職員的快樂指數最大。但是,沒有職員願和直接上司一起與會。第一行乙個整數n。1 n 6000 接下來n行,第i 1行表示i號職...

樹形dp 沒有上司的舞會

題意 給定一棵樹,每個點有權值,對於每乙個點,它和它的父節點不能同時被選,求權值最大值。定義d p x 0 dp x 0 表示不選擇x號點時的最大值,dp x 1 d p x 1 表示選擇 x x 號點時的最大值。對於x role presentation style position relati...

樹形DP 沒有上司的舞會

ural大學有n名職員,編號為1 n。他們的關係就像一棵以校長為根的樹,父節點就是子節點的直接上司。每個職員有乙個快樂指數,用整數 hi 給出,其中 1 i n。現在要召開一場周年慶宴會,不過,沒有職員願意和直接上司一起參會。在滿足這個條件的前提下,主辦方希望邀請一部分職員參會,使得所有參會職員的快...