沒有上司的舞會

2021-10-22 23:42:05 字數 1783 閱讀 5872

ural大學有n名職員,編號為1~n。

他們的關係就像一棵以校長為根的樹,父節點就是子節點的直接上司。

每個職員有乙個快樂指數,用整數 hi 給出,其中 1≤i≤n。

現在要召開一場周年慶宴會,不過,沒有職員願意和直接上司一起參會。

在滿足這個條件的前提下,主辦方希望邀請一部分職員參會,使得所有參會職員的快樂指數總和最大,求這個最大值。

輸入格式

第一行乙個整數n。

接下來n行,第 i 行表示 i 號職員的快樂指數hi。

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

輸出格式

輸出最大的快樂指數。

資料範圍

1 ≤ n ≤ 6000,

−128 ≤ hi ≤ 127

輸入樣例71

1111

111 32 3

6 47 4

4 53 5

輸出樣例

5

題目分析:

狀態劃分:集合為:f[n][2]

f[i][1] //表示位於i節點的職員參加舞會

f[i][0] //表示位於i節點的職員不去參加舞會狀態計算:當i職員參加舞會時,他的下屬便不能參加舞會,即f[i][1]+=f[i-1][0].

當i職員不去參加舞會時,他的下屬可以來參加舞會,也可以不參加舞會,即f[i][0]+=max(f[i-1][1],f[i-1][0]).

**如下:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define ll long long

using

namespace std;

const

int n=

6005;;

//每個人參加舞會的高興度

int f[n][2

];int h[n]

,e[n]

,ne[n]

,idx;

//鄰接表

bool has_father[n]

;//儲存i節點是否有父節點

void

add(

int a,

int b)

//向鄰接表中插入一條邊

void

dfs(

int u)

//u為當前子樹的根節點

}int

main()

int root=1;

while

(has_father[root]

) root++

;//尋找根節點

dfs(root)

;//dfs查詢答案

cout<<

max(f[root][0

],f[root][1

])

}

沒有上司的舞會

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

沒有上司的舞會

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

沒有上司的舞會

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