JSOI2016 最佳團體 DFS序 樹形DP

2022-06-01 19:18:09 字數 2410 閱讀 3254

洛谷 p4322 [jsoi2016]最佳團體

description

茜茜的舞蹈團隊一共有\(n\)名候選人,這些候選人從\(1\)到\(n\)編號。方便起見,茜茜的編號是\(0\)號。每個候選人都由一位編號比他小的候選人\(r_i\)推薦。如果\(r_i=0\)則說明這個候選人是茜茜自己看上的。為了保證團隊的和諧,茜茜需要保證,如果招募了候選人\(i\),那麼候選人\(r_i\)也一定需要在團隊中。當然了,茜茜自己總是在團隊裡的。每乙個候選人都有乙個能力值\(p_i\),也有乙個招募費用\(s_i\)。茜茜希望招募\(k\)個候選人(茜茜自己不算),組成乙個價效比最高的團隊。也就是,這\(k\)個被茜茜選擇的候選人的總能力值與總招募總費用的比值最大。

input

輸入一行包含兩個正整數\(k\)和\(n\)。

接下來\(n\)行,其中第\(i\)行包含\(3\)個整數\(s_i\),\(p_i\),\(r_i\)表示候選人\(i\)的招募費用,戰鬥值和推薦人編號。

output

輸出一行乙個實數,表示最佳比值。答案保留三位小數。

sample input 1

1 2

1000 1 0

1 1000 1

sample output 1
0.001
hint

對於\(100\%\)的資料滿足\(1\le k\le n\le 2500, 0.

幾乎是裸的0/1分數規劃,於是二分答案,問題轉化為與選課一模一樣的樹上揹包問題,可以用樹形dp在\(o(nk^2)\)的時間複雜度內求解.

可是我們定睛一看,\(1\le k\le n\le 2500\).

所以\(o(nk^2)\)的複雜度是無法接受的.

這時我們想到,在洛谷p2014 選課 題解中,有許多大佬提到可以通過在dfs序上dp的方法,把一次樹形dp的時間複雜度降為\(o(nk)\).但是我不會啊

JSOI 2016 最佳團體

有 n n 名候選人,從 1 role presentation 11到 n n 編號,有乙個隊長的編號為 0 role presentation 0 0,每個候選人都由一位編號比他小的候選人推薦 如果為 0 0 則表示是隊長推薦的 隊長希望招募 k role presentation k k個人,...

JSOI2016 最佳團體

題面 給定一棵樹,每個點有代價和價值,現在求乙個點集,使得點集中每個點的祖先也都在點集中,且點集中所有點的價值和 代價和最大。題解價值和 代價和最大 過於明顯的01分數規劃,直接把a mid j作為點權跑樹形dp,然後看f r oot 1 f root 1 f root 1 是否大於0即可。據說這題...

JSOI2016 最佳團體

嘟嘟嘟 01分數規劃 樹形揹包。然後就沒了。結果我調了半天,原因還是樹形揹包不熟練。我是用dfs序求的,轉化的時候,是dp i j 轉化到dp i 1 j 1 或dp i siz pos i j 而不是像普通的dp從別的狀態轉化到dp i j 所以最後的答案應該考慮到dp n 1 m 1 而不是只到...