P1352 沒有上司的舞會 樹形DP入門

2022-03-03 08:44:50 字數 2222 閱讀 6147

某大學有n個職員,編號為1~n。他們之間有從屬關係,也就是說他們的關係就像一棵以校長為根的樹,父結點就是子結點的直接上司。現在有個周年慶宴會,宴會每邀請來乙個職員都會增加一定的快樂指數ri,但是呢,如果某個職員的上司來參加舞會了,那麼這個職員就無論如何也不肯來參加舞會了。所以,請你程式設計計算,邀請哪些職員可以使快樂指數最大,求最大的快樂指數。

輸入格式:

第一行乙個整數n。(1<=n<=6000)

接下來n行,第i+1行表示i號職員的快樂指數ri。(-128<=ri<=127)

接下來n-1行,每行輸入一對整數l,k。表示k是l的直接上司。

最後一行輸入0 0

輸出格式:

輸出最大的快樂指數。

輸入樣例#1: 複製

711

1111

11 3

2 36 4

7 44 5

3 50 0

輸出樣例#1: 複製

5

樹形dp——dfs版

#include#define n 6005

using

namespace

std;

int n,r[n],dp[n][2

],tot,head[n];

struct

nodee[n];

bool

v[n];

void add(int u,int

v)//

dp[i][0]表示i點不被選擇時最大值

//dp[i][1]表示i點被選擇時的最大值

void tredp(intu)}

intmain()

introot;

for(int i=1;i<=n;i++) if(!v[i]) root=i;

tredp(root);

printf(

"%d\n

",max(dp[root][0],dp[root][1

]));

return0;

}

樹形dp——倒序佇列或棧

#include#define n 6005

using

namespace

std;

int n,r[n],dp[n][2

],tot,head[n];

struct

nodee[n];

bool

v[n];

void add(int u,int

v)//

dp[i][0]表示i點不被選擇時最大值

//dp[i][1]表示i點被選擇時的最大值

queueq;

stack

q;bool

vis[n];

void bfs(int

root)}}

while(!q.empty())dp[u][

1]+=r[u];

}}int

main()

introot;

for(int i=1;i<=n;i++) if(!v[i]) root=i;

bfs(root);

printf(

"%d\n

",max(dp[root][0],dp[root][1

]));

return0;

}

拓撲排序——反向建邊

#include#define n 6005

using

namespace

std;

int n,r[n],dp[n][2

],tot,head[n],rd[n];

struct

nodee[n];

void add(int u,int

v)//

dp[i][0]表示i點不被選擇時最大值

//dp[i][1]表示i點被選擇時的最大值

bool

v[n];

queue

q;void

topo()

}}int

main()

introot;

for(int i=1;i<=n;i++) if(!v[i]) root=i;

topo();

printf(

"%d\n

",max(dp[root][0],dp[root][1

]));

return0;

}

P1352 沒有上司的舞會(樹形dp)

題意 在乙個學校裡,有n個人,他們之間的關係可以描述成一顆樹,樹上的父節點是其子節點的直屬上司。現在學校要舉辦乙個聚會,每個人來參加聚會,會產生a i 的貢獻,但是如果乙個人的直系上司來參加聚會,那麼這個人無論如何都不會來參加。問你能夠產生的最大貢獻是多少?思路 我們先找到入度為0的根節點,由根節點...

P1352 沒有上司的舞會

原題鏈結 樹形dp入門 dp方程搞錯了居然還過了90 利用dfs遞迴求解 每個點分為選和不選兩種情況 假設選為1不選為0 dp x 0 max dp num i 1 dp num i 0 這裡一開始寫成了dp num i 1 但它的兒子的兩種狀態實際上都是可選的 dp x 1 dp num i 0 ...

P1352 沒有上司的舞會

題目描述 某大學有n個職員,編號為1 n。他們之間有從屬關係,也就是說他們的關係就像一棵以校長為根的樹,父結點就是子結點的直接上司。現在有個周年慶宴會,宴會每邀請來乙個職員都會增加一定的快樂指數ri,但是呢,如果某個職員的上司來參加舞會了,那麼這個職員就無論如何也不肯來參加舞會了。所以,請你程式設計...