題目描述
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
1111
1111 3
2 36 4
7 44 5
3 50 0
樣例輸出
5
思路
樹形dp,對於每乙個人,只有兩種方案:邀請,或者不邀請。
如果邀請,則他的下屬都不能邀請。如果不邀請,他的下屬可以邀請,也可以不邀請。
這樣我們就得到了狀態轉移方程。yes[i]=sum(no[j]);no[i]=sum(max(yes[j],no[j]));j是i的下屬。
然後我們用遞迴實現這個過程就行了。
**
#include#include#include#include#include#include#include#include#includeusing namespace std;
int n;
bool vis[6004];
vectortree[6004];
void dfs(int now){
int sz,i,j,ans1=0,ans2=0;
sz=tree[now].size();
for(i=0;i
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...