Luogu P1352 沒有上司的舞會

2021-08-29 15:46:13 字數 2198 閱讀 8562

洛谷傳送門

某大學有n

nn個職員,編號為1∼n

1\sim n

1∼n。他們之間有從屬關係,也就是說他們的關係就像一棵以校長為根的樹,父結點就是子結點的直接上司。現在有個周年慶宴會,宴會每邀請來乙個職員都會增加一定的快樂指數r

ir_i

ri​,但是呢,如果某個職員的上司來參加舞會了,那麼這個職員就無論如何也不肯來參加舞會了。所以,請你程式設計計算,邀請哪些職員可以使快樂指數最大,求最大的快樂指數。

輸入格式:

第一行乙個整數n。(1≤n

≤6000

1\le n\le 6000

1≤n≤60

00)接下來n

nn行,第i+1

i+1i+

1行表示i號職員的快樂指數r

ir_i

ri​。(−

128≤ri

≤127

-128\le ri\le 127

−128≤r

i≤12

7)接下來n−1

n-1n−

1行,每行輸入一對整數l,k

l,kl,

k。表示k

kk是l

ll的直接上司。

最後一行輸入0

00\ 0

00輸出格式:

輸出最大的快樂指數。

輸入樣例#1:

711

1111

11 3

2 36 4

7 44 5

3 50 0

輸出樣例#1:
5
樹上0/1

dp

0/1dp

0/1d

p。 設dp[

i][0

]dp[i][0]

dp[i][

0]表示不選這個點, dp[

i][1

]dp[i][1]

dp[i][

1]表示選這個點, 那麼轉移方程為:

d p[

i][0

]=∑j

,j∈s

on[i

]max

(dp[

j][0

],dp

[j][

1])d

p[i]

[1]=

∑j,j

∈son

[i]d

p[j]

[0]+

val[

i]

dp[i][0]=\sum_max(dp[j][0],dp[j][1]) \\ dp[i][1]=\sum_dp[j][0]+val[i]

dp[i][

0]=j

,j∈s

on[i

]∑​m

ax(d

p[j]

[0],

dp[j

][1]

)dp[

i][1

]=j,

j∈so

n[i]

∑​dp

[j][

0]+v

al[i

]**如下:

#include

#include

#include

#include

#include

#include

#define r register

#define in inline

#define w while

#define gc getchar()

#define mx 10500

bool neg;

template

<

class

t>

in void

in(t &x)

int dot, cnt;

int dp[mx][2

], head[mx]

, val[mx]

, deg[mx]

;struct edge edge[mx <<1]

;in void

add(r int from, r int to)

, head[from]

= cnt;

}void

dfs(r int now)

}int

main

(void

)}

Luogu P1352 沒有上司的舞會

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

LuoguP1352 FJSC 沒有上司的舞會

現在你有一棵樹,每乙個點有乙個點權 r i 如果選擇了 i 點,那麼 i 子樹上的所有的點都不能選,現在要求選擇若干個點,使得點權和最大。設 dp i 1 為選擇 i 點的 i 子樹的最大點權和,dp i 0 為不選擇 i 點的 i 子樹的最大點權和,那麼我們知道初始化為 dp i 0 sum ma...

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 ...