沒有上司的舞會 樹形DP

2022-08-02 23:27:21 字數 1268 閱讀 1441

沒有上司的舞會

題目描述

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

輸入描述

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

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

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

最後一行輸入0,0。

輸出描述

輸出最大的快樂指數。

樣例輸入71

1111

111 32 3

6 47 4

4 53 5

0 0

#includeint n,l,k,ans,jo[6005],re[6005

];struct

ty t[

6005

];int max(int a,int

b)void find(int x,int y)//

建樹;

int zhao(int x)//

找根 void dp(int

x)//

是葉子節點的話,參加不參加。。

if(t[x].bro!=0

) dp(t[x].bro);

if(t[x].son!=0

) dp(t[x].son);

jo[t[x].fa]+=re[x]; //

上司參加,直系下屬不能參加;

re[t[x].fa]+=max(jo[x],re[x]);//

上司不參加,直系下屬參不參加無所謂,找max

}int

main()

//讀入資料,順便把i參加的快樂值加到jo[i]

scanf("

%d%d

",&l,&k);

while(l!=0&&k!=0)

k=zhao(n);//

找到根節點;

dp(k);

ans=max(jo[k],re[k]);//

校長參不參加的最大值;

printf("%d"

,ans);

return0;

}

view code

//人生第一次打樹形dp,激動啊。。。。

樹形dp 沒有上司的舞會

題意 給定一棵樹,每個點有權值,對於每乙個點,它和它的父節點不能同時被選,求權值最大值。定義d p x 0 dp x 0 表示不選擇x號點時的最大值,dp x 1 d p x 1 表示選擇 x x 號點時的最大值。對於x role presentation style position relati...

樹形DP 沒有上司的舞會

ural大學有n名職員,編號為1 n。他們的關係就像一棵以校長為根的樹,父節點就是子節點的直接上司。每個職員有乙個快樂指數,用整數 hi 給出,其中 1 i n。現在要召開一場周年慶宴會,不過,沒有職員願意和直接上司一起參會。在滿足這個條件的前提下,主辦方希望邀請一部分職員參會,使得所有參會職員的快...

沒有上司的舞會 樹形DP

ural大學有n名職員,編號為1 n。他們的關係就像一棵以校長為根的樹,父節點就是子節點的直接上司。每個職員有乙個快樂指數,用整數 hi 給出,其中 1 i n。現在要召開一場周年慶宴會,不過,沒有職員願意和直接上司一起參會。在滿足這個條件的前提下,主辦方希望邀請一部分職員參會,使得所有參會職員的快...