joe覺得雲朵很美,決定去山上的商店買一些雲朵。商店裡有n朵雲,雲朵被編號為1,2,…...,n,並且每朵雲都有乙個價值。但是商店老闆跟他說,一些雲朵要搭配來買才好,所以買一朵雲則與這朵雲有搭配的雲都要買。
但是joe的錢有限,所以他希望買的價值越多越好。
第1行n,m,w,表示n朵雲,m個搭配,joe有w的錢。
第2~n+1行,每行ci,di表示i朵雲的價錢和價值。
第n+2~n+1+m行,每行ui,vi,表示買ui就必須買vi,同理,如果買vi就必須買ui。
一行,表示可以獲得的最大價值。
5 3 103 10
3 10
3 10
5 100
10 1
1 33 2
4 2
1並查集 + 01揹包;
並查集 將搭配的雲彩都整合起來;
01揹包進行獲取最大價值;
1 #include2購買搭配using
namespace
std;
3const
int maxn = 10010;4
intn, m, k, f[maxn], dp[maxn], ci[maxn], di[maxn];
5struct
nodet[maxn];
8void
init()
11int getf(int
v)15
void meg(int v, int
u)19
intmain()
28for(int i = 1; i <= n; i++) getf(i);
29for(int i = 1; i <= n; i++)
33for(int i = 1; i <= n; i++)
38} 39}
40 cout << dp[k] <
41return0;
42 }
1387 搭配購買 buy
題目描述 joe覺得雲朵很美,決定去山上的商店買一些雲朵。商店裡有n朵雲,雲朵被編號為1,2,n,並且每朵雲都有乙個價值。但是商店老闆跟他說,一些雲朵要搭配來買才好,所以買一朵雲則與這朵雲有搭配的雲都要買。但是joe的錢有限,所以他希望買的價值越多越好。輸入 第1行n,m,w,表示n朵雲,m個搭配,...
SSL ZYC 2347 搭配購買
題目大意 現在有n件商品,其中m組買了乙個就必須買另外乙個。求k元錢的最大價值。思路 如果沒有第二句話就是乙個普通的01揹包。既然這樣,那這道題是否可以轉換為01揹包呢?答案很明顯是可以的。可以利用並查集,將這m組配對購買的商品劃到乙個集合裡,這樣就可以確定買了其中乙個就得買另乙個。最後就是01揹包...
洛谷 P1455 搭配購買
給定n件物品 容量為sum的揹包,購買一件物品需要購買它所依賴 的物品,求最大價值 1 並查集 2 tarjan縮點 本文採取第二種方法 將乙個強連通塊縮成乙個點,費用和價值累加,最後揹包dp即可 邊集 原圖 edge i 乙個點是否在棧內 instack i 1或0 新圖 bcc cnt 新節點費...