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,但是呢,如果某個職員的上司來參加舞會了,那麼這個職員就無論如何也不肯來參加舞會了。所以,請你程式設計計算,邀請...