樹形dp 沒有上司的舞會

2021-08-24 23:29:06 字數 1353 閱讀 7147

題意:給定一棵樹,每個點有權值,對於每乙個點,它和它的父節點不能同時被選,求權值最大值。 定義d

p[x]

[0] dp[

x][0

]表示不選擇x號點時的最大值,dp

[x][

1]d p[

x][1

]表示選擇

x x

號點時的最大值。 對於x

' role="presentation" style="position: relative;">x

x號點不被選擇的情況,也就意味著它的子節點

v v

可以被選,也可以不被選,所以方程就是:

dp[x][0]+=max(dp[v][1],dp[v][0]);
對於

x' role="presentation" style="position: relative;">x

x號點被選擇的情況,它的子節點

v v

不可以被選,所以方程就是

dp[x][1]+=dp[v][0];
我們從根節點開始dfs,從葉節點開始累加,最後在dp

[roo

t][1

]和dp

[roo

t][0

]' role="presentation" style="position: relative;">dp[

root

][1]

和dp[

root

][0]

dp[r

oot]

[1]和

dp[r

oot]

[0]中取乙個最大值即可

#include

#include

#include

using

namespace

std;

int dp[1001000][2],f[1001000];

int n,num,head[1001000];

struct node

e[1001000];

void add(int from,int to)

void dfs(int x)

return;

}int main()

int z,ze;

cin>>z>>ze;

int root;

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

if(f[i]==0)

dfs(root);

int ans=max(dp[root][1],dp[root][0]);

cout

0;}

樹形DP 沒有上司的舞會

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

沒有上司的舞會 樹形DP

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

沒有上司的舞會(樹形dp)

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