codevs 1380 沒有上司的舞會 樹形動規

2021-07-05 11:41:09 字數 1389 閱讀 6234

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

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

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

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

最後一行輸入0,0。

輸出最大的快樂指數。

7 1

1 1

1 1

1 1

1 3

2 3

6 4

7 4

4 5

3 5

0 0

****

5**

各個測試點 :1s

很典型的樹形動規

dp[i][0]表示該點(人)不選取(不參加舞會)的情況下兒子(下屬)所能得到的最大值(歡樂值)

dp[i][1]按照上面的對應下~

轉移方程看**吧……(打了一會發現找不到求和符號而且子節點不好表示……)(雖然覺得我的題解沒人看qaq)

#include 

#include

#include

using

namespace

std;

const

int maxn=6010;

struct data ;

int head[maxn],cnt;

data e[maxn];

inline

void insert(int u,int v)

int in[maxn];

int n;

int w[maxn];

int dp[maxn][2];

inline

int dp(int x,int y)

else

for(int i=head[x];i;i=e[i].next)

dp[x][y]+=max(dp(e[i].to,0),dp(e[i].to,1));

return dp[x][y];

}int main()

for(int i=1;iint u,v;

scanf("%d%d",&v,&u);

insert(u,v);

in[v]++;

}int i,ans=0;

for(i=1;i<=n;i++)

if(!in[i])

ans+=max(dp(i,0),dp(i,1));

printf("%d",ans);

return

0;}

codevs1380 沒有上司的舞會

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

CODEVS 1380 沒有上司的舞會

題意 在一棵樹上每個點都有價值,在這些點裡找出一些互不相連的點並使其價值之和最大。標籤是樹形dp,於是我第一次就嘗試著用dp做,然而在讀入的時候這個題挖了個坑,讀入a,b,b是a的上司,然而我二話沒說就把a當做了b的上司,結果就做不出來了。然後第二次我就 think diffierent 用了一種貪...

CODEVS 1380沒有上司的舞會

include include include using namespace std vector sons 6010 int mmax int a,int b if f cur state 0 return f cur state int sum 0 for int i 0 iint tryso...