樹狀dp入門

2021-09-25 09:35:38 字數 1074 閱讀 5561

description

實驗室被zser大魔王統治了,這天zser想選出一部分人看看他們對zser的恐懼值,不過實驗室中除了某雲飛之外每個人都有他最討厭的人,就像樹形結構一樣。zser選出的人中不能存在乙個人討厭乙個人。問zser選出的人可以帶來的最大恐懼值為多少。

input

第1行1個正整數 n,表示n個人(n<=6000)。

第i+1行為第i個人對zser的恐懼值ti(-1000<=ti<=1000)。

之後的n-1行每行有兩個正整數x,y表示x最討厭的人為y(x,y<=n)。

某雲飛為1號。

output

輸出一行為可以zser可以得到的最大恐懼值。

sample input copy

51 2

3452 1

3 14 2

5 2

sample output copy

12
讀完題也不知道要咋寫,學習了樹狀陣列才有了一點點思路;

題大概意思就是,有n個人,每個人對應有不同的價值,但有n-1種關係,並且他們不能同時存在,求輸出的最大價值總和;

思路:我們先定義乙個二維dp[i][0/1]表示先不選擇第i個人,然後剛開始輸入時都預設選擇,然後是dfs建樹,我們從vector第一行開始,每次搜尋下面的子樹,還要考慮到選不選當前樹,如果不選就要看子樹選不選,如果選就要+子樹不選的價值,就這個亞子一直遞迴下去,這樣就可以得到根節點的價值最大為多少;

#include#include#include#include#include#include#include#includeusing namespace std;

int dp[6010][3];

vector>f(6010);

void dfs(int x)

}int main()

dfs(1);

int ans=0;

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

printf("%d\n",ans);

}return 0;

}

樹狀DP入門例題

p1352 沒有上司的舞會 沒有上司的舞會 p1352 題意 有一場舞會,每乙個人都有乙個快樂值,但不能和上司同時出現在舞會中,問這個舞會的快樂值最大為多少 解法 樹狀dp include using namespace std define maxn 100000 struct nodeedge ...

POJ 2342 (樹狀DP)入門

入門比較好的部落格 include cstdio include iostream include cstring include algorithm using namespace std const int max 6005 樹形dp 入門 題意 公司舉辦 晚會,為了提高活躍度 每個人都有自己的...

dp 樹狀陣列

給定乙個長度為 n n 的序列 a a 求 a a 有多少個長度為 m m 的嚴格遞增子串行。輸入格式 第一行包含整數 t t t,表示共有 t t 組測試資料。每組資料,第一行包含兩個整數 n n 和 m m。第二行包含 n n 個整數,表示完整的序列 a a。輸出格式 每組資料輸出乙個結果,每個...