日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

【树形DP】没有上司的晚会 (ssl 1607)

發(fā)布時(shí)間:2023/12/3 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【树形DP】没有上司的晚会 (ssl 1607) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

沒(méi)有上司的晚會(huì)沒(méi)有上司的晚會(huì)沒(méi)會(huì)

Description

Ural大學(xué)有N個(gè)職員,編號(hào)為1~N。他們有從屬關(guān)系,也就是說(shuō)他們的關(guān)系就像一棵以校長(zhǎng)為根的樹(shù),父結(jié)點(diǎn)就是子結(jié)點(diǎn)的直接上司。每個(gè)職員有一個(gè)快樂(lè)指數(shù)。現(xiàn)在有個(gè)周年慶宴會(huì),要求與會(huì)職員的快樂(lè)指數(shù)最大。但是,沒(méi)有職員愿和直接上司一起與會(huì)。

Input

第一行一個(gè)整數(shù)N。(1<=N<=6000)

接下來(lái)N行,第i+1行表示i號(hào)職員的快樂(lè)指數(shù)Ri。(-128<=Ri<=127)

接下來(lái)N-1行,每行輸入一對(duì)整數(shù)L,K。表示K是L的直接上司。

最后一行輸入0,0。

Output

輸出最大的快樂(lè)指數(shù)。

Sample Input

7

1

1

1

1

1

1

1

1 3

2 3

6 4

7 4

4 5

3 5

0 0

Sample Output

5

題目大意:

有一場(chǎng)party,有n個(gè)人會(huì)來(lái),每個(gè)人都有自己的happy度,部分人有自己上司(見(jiàn)到自己的上司就會(huì)無(wú)法發(fā)揮happy值),求最大的happy指數(shù)

解題方法:

用f[i][1](f[i][1]+=f[i的下屬][0])表示第i個(gè)人去,f[i][0](f[i][0]+=max(f[i的下屬][0],f[i的下屬][1]))表示第i個(gè)人不去,用鏈表的形式存每一條關(guān)系線(xiàn)的上司(x),屬下(y),頭相等的另一條線(xiàn)(next),再用一個(gè)head來(lái)存每個(gè)點(diǎn)連接下屬的線(xiàn),再用遞歸來(lái)求出結(jié)果。

#include<cstdio> #include<iostream> using namespace std; int n,k,l,pd[6002],a[6002],f[6002][3],head[6002]; struct abc {int x,y,next; }s[6002]; void dp(int dep) {f[dep][1]=a[dep];for (int i=head[dep];i;i=s[i].next){dp(s[i].y);//遞歸f[dep][0]+=max(f[s[i].y][1],f[s[i].y][0]);f[dep][1]+=f[s[i].y][0];} } int main() {scanf("%d",&n);for (int i=1;i<=n;i++)scanf("%d",&a[i]);for (int i=1;i<=n;i++){scanf("%d%d",&l,&k);s[i].x=k;//存上司s[i].y=l;//存下屬s[i].next=head[k];//把當(dāng)前的next指向上一個(gè)headhead[k]=i;//然后替代掉headpd[l]=1;//有上司}for (int i=1;i<=n;i++)if (!pd[i])//沒(méi)上司的{dp(i);//遞歸printf("%d",max(f[i][1],f[i][0]));//去和不去中挑最大的break;} }

總結(jié)

以上是生活随笔為你收集整理的【树形DP】没有上司的晚会 (ssl 1607)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。