沒有上司的舞會

2021-09-24 23:00:12 字數 1910 閱讀 3357

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

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

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

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

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

輸入格式

第一行乙個整數n。

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

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

最後一行輸入0,0。

輸出格式

輸出最大的快樂指數。

資料範圍

1≤n≤6000,

−128≤hi≤127

輸入樣例:71

1111

111 32 3

6 47 4

4 53 5

0 0輸出樣例:

5狀態設定

f[u][0] 表示不取u

f[u][1] 表示取u轉移f[u

][1]

=max

(f[u

][1]

,max

(f[u

][1]

+f[v

][0]

,f[v

][0]

))

;f[u][1]=max(f[u][1],max(f[u][1]+f[v][0],f[v][0]));

f[u][1

]=ma

x(f[

u][1

],ma

x(f[

u][1

]+f[

v][0

],f[

v][0

]));

f [u

][0]

=max

(max

(f[u

][0]

,f[v

][1]

+f[u

][0]

),ma

x(f[

v][1

],f[

v][0

]));

f[u][0]=max(max(f[u][0],f[v][1]+f[u][0]),max(f[v][1],f[v][0]));

f[u][0

]=ma

x(ma

x(f[

u][0

],f[

v][1

]+f[

u][0

]),m

ax(f

[v][

1],f

[v][

0]))

;

#include

#define maxn 100000

using

namespace std;

struct nodee[maxn]

;int cnt,head[maxn]

;void

add(

int u,

int v)

int vis[maxn]

;int f[maxn][3

];void

dfs(

int u)}}

int n;

int du[maxn]

;int

main()

for(

int i=

1;i)int pos;

for(

int i=

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

dfs(pos)

;printf

("%d\n"

,max

(f[pos][1

],f[pos][0

]));

}

沒有上司的舞會

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

沒有上司的舞會

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

沒有上司的舞會

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