樹形dp Jzoj P3914 人品問題

2022-07-24 05:51:12 字數 1440 閱讀 2796

description

網上出現了一種高科技產品——人品測試器。只要你把你的真實姓名輸入進去,系統將自動輸出你的人品指數。yzx不相信自己的人品為0。經過了許多研究後,yzx得出了乙個更為科學的人品計算方法。這種方法的理論依據是乙個非常重要的結論:人品具有遺傳性。因此,乙個人的人品完全由他的祖先決定。yzx提出的人品計算方法相當簡單,只需要將測試物件的k個祖先的人品指數(可能為負數)加起來即可。選擇哪k個祖先可以由測試者自己決定,但必須要滿足這個要求:如果除自己的父母之外的某個祖先被選了,那麼他的下一代必需要選(不允許跳過某一代選擇更遠的祖先,否則將失去遺傳的意義)。

非常不幸的是,yzx測試了若干次,他的人品值仍然不能為乙個正數。現在yzx需要你幫助他找到選擇祖先的最優方案,使得他的人品值最大。

input

第一行是兩個用空格隔開的正整數n和k,其中n代表yzx已知的家譜中共有多少人(包括yzx本身在內),k的意義參見問題描述。

第二行有n-1個用空格隔開的整數(可能為負),這些數的絕對值在2^15以內。其中,第i個數表示編號為i+1的人的人品值。我們規定,編號為1的人是yzx。

接下來n行每行有兩個用空格隔開的數,其中第i行的兩個數分別表示第i個人的父親和母親的編號。如果某個人的父親或母親不在這個家譜內,則在表示他的父親或母親的編號時用0代替。

除yzx以外的所有人都是yzx的祖先,他們都會作為父親或母親被描述到。每個人都不可能同時作為多個人的父親或者是母親。

output

乙個整數,表示yzx能夠得到的最大人品值。

sample input

6 3

-2 3 -2 3 -1

2 34 5

0 60 0

0 00 0

sample output

4

樣例說明下圖顯示了輸入樣例所描述的家譜圖。括號裡的數表示的是該人的人品值。

4(-2)  5(3)  6(-1)

\   /     /

\ /     /

2(-2)   3(3)

\   /

\ /1 <---yzx

顯然,選擇祖先2、3、5能使yzx的人品值達到最大。這個最大值為4,表示yzx能夠得到的最大人品值。

data constraint

50%的資料,n<=10。

100%的資料,n<=100。

1 #include 2 #include 3

#define n 210

4#define inf 0x7ffffff

5using

namespace

std;

6struct edge e[n];

7int

n,k,p[n][n],f[n][n];

8int dp(int x,int

sum)918

intmain()

19

樹形dp JZOJ 3914 人品問題

給出一棵樹。乙個節點至多有兩個祖先,如果選了某個祖先,那麼它的後代必須要選乙個。每個點上有乙個權值,求出從1 11號節點取k kk個祖先的最大總權值。很明顯的樹形動態規劃,資料較小,這裡打了o n 3 o n 3 o n3 的做法。設f i j f i j f i j 為第i ii個點選了j jj個...

jzoj 3914 人品問題 樹形DP

description 網上出現了一種高科技產品 人品測試器。只要你把你的真實姓名輸入進去,系統將自動輸出你的人品指數。yzx不相信自己的人品為0。經過了許多研究後,yzx得出了乙個更為科學的人品計算方法。這種方法的理論依據是乙個非常重要的結論 人品具有遺傳性。因此,乙個人的人品完全由他的祖先決定。...

JZOJ3914 人品問題 樹形DP

選擇乙個結點當且僅當選擇他的父親。求選擇m m個結點的最大價值。看到這道題立馬想到方程。很好,o n 3 o n3 肯定會tt飛。看看資料,嗯n 100n 1 00。設f x k 表示在以結點x為根的子數中選擇k個結點的最大價值 那麼當這棵樹沒有子節點時,僅有f x 1 a x 其它全部是inf 當...