並查集 01揹包 搭配購買

2021-10-02 12:57:32 字數 1362 閱讀 3034

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。

輸出格式

一行,表示可以獲得的最大價值。

資料範圍

1 ≤n

≤10000

1≤n≤10000

1≤n≤10

000,

0 ≤m

≤5000

0≤m≤5000

0≤m≤50

00,1≤w

≤10000

1≤w≤10000

1≤w≤10

000,

1 ≤c

i≤

5000

1≤ci≤5000

1≤ci≤5

000,

1 ≤d

i≤

1001≤di≤100

1≤di≤1

00,1≤u

i,vi

≤n

1≤u_i,v_i≤n

1≤ui​,

vi​≤

n輸入樣例:

5 3 10

3 10

3 10

3 10

5 100

10 1

1 33 2

4 2輸出樣例:

1把所有存在依賴關係的物品通過並查集弄成乙個聯通塊,然後在 根上面維護對應的權值和重量。最後跑乙個01揹包來求最大值。

#include

using

namespace std;

const

int n=

2e4+7;

int pre[n]

,w[n]

,c[n]

;int n,m,wi;

int f[n]

;int

find

(int x)

intmain()

for(

int i=

1;i<=m;i++)}

for(

int i=

1;i<=n;i++)}

} cout<<}

b lg 搭配購買(並查集 01揹包)

有一些雲朵商品,你需要如果商品有搭配關係,則你需要購買具有搭配關係的所有雲朵 已知你的初始財富以及各物品的價錢與價值,求出最大價值 思路 這題一開始寫的 o n 2m 的暴力,得分為40pt includeusing namespace std const int n 1e4 5,w 1e3 5 i...

P1455 搭配購買 (並查集 01揹包)

題目描述 明天就是母親節了,電腦組的小朋友們在忙碌的課業之餘挖空心思想著該送什麼禮物來表達自己的心意呢?聽說在某個 上有賣雲朵的,小朋友們決定一同前往去看看這種神奇的商品,這個店裡有n朵雲,雲朵已經被老闆編號為1,2,3,n,並且每朵雲都有乙個價值,但是商店的老闆是個很奇怪的人,他會告訴你一些雲朵要...

洛谷P1455 搭配購買(並查集縮點 01揹包)

題目描述 明天就是母親節了,電腦組的小朋友們在忙碌的課業之餘挖空心思想著該送什麼禮物來表達自己的心意呢?聽說在某個 上有賣雲朵的,小朋友們決定一同前往去看看這種神奇的商品,這個店裡有n朵雲,雲朵已經被老闆編號為1,2,3,n,並且每朵雲都有乙個價值,但是商店的老闆是個很奇怪的人,他會告訴你一些雲朵要...