vijos1250 最勇敢的機械人

2021-08-18 05:48:24 字數 1193 閱讀 6537

背景wind設計了很多機械人。但是它們都認為自己是最強的,於是,一場比賽開始了~

描述機械人們都想知道誰是最勇敢的,於是它們比賽搬運一些物品。

它們到了乙個倉庫,裡面有n個物品,每個物品都有乙個價值pi和重量wi,但是有些物品放在一起會**,並且**具有傳遞性。(a和b會**、b和c會**則a和c會**)

機械人們可不想因此損失自己好不容易從wind那裡敲詐來的裝備,於是它們想知道在能力範圍內,它們最多可以拿多少價值的物品。

你能幫助它們嗎?

格式輸入格式

每組測試資料

第1行為n,wmax,k(0<=n,wmax,k<=1000)

接下來n行,為每個物品的pi,wi(0<=pi<=1000,1<=wi<=10,均為整數)

再接下來k行,每行2個數字a,b表示a和b會發生**

輸出格式

對每組資料輸出1行

為最大可能價值

樣例1樣例輸入1

3 10 1

100 1

200 5

10 5

1 2樣例輸出1

210

這個其實是揹包加並查集 然而我揹包dp太弱仍然只會寫遞迴,所以我想從今以後都寫遞推(避免爆棧),回來要學習大神的揹包九講

因為可能有許多連通塊,所以使用vector可以盡可能節省記憶體

我們a陣列第一維是連通塊數,第二維就是這個連通塊都有哪些數

#include

#include

#define n 1100

using

namespace

std;

inline

int read()

return x;

}int fa[n];

inline

int find(int x)

vector

a[n];

inline

int max(int x,int y)

int f[n],n,wmax,k,p[n],w[n];

int main()

for (int i=1;i<=n;++i)a[find(i)].push_back(i);

for (int i=1;i<=n;++i)

}printf("%d\n",f[wmax]);

return

0;}

vijos 1250 最勇敢的機械人

題目描述 wind設計了很多機械人。但是它們都認為自己是最強的,於是,一場比賽開始了 機器人們都想知道誰是最勇敢的,於是它們比賽搬運一些物品。它們到了乙個倉庫,裡面有n個物品,每個物品都有乙個價值pi和重量wi,但是有些物品放在一起會 並且 具有傳遞性。a和b會 b和c會 則a和c會 每個機械人的最...

Vijos P1250 最勇敢的機械人

p1250最勇敢的機械人 accepted wind設計了很多機械人。但是它們都認為自己是最強的,於是,一場比賽開始了 機器人們都想知道誰是最勇敢的,於是它們比賽搬運一些物品。它們到了乙個倉庫,裡面有n個物品,每個物品都有乙個價值pi和重量wi,但是有些物品放在一起會 並且 具有傳遞性。a和b會 b...

最勇敢的機械人

題目描述 wind設計了很多機械人。但是它們都認為自己是最強的,於是,一場比賽開始了 機器人們都想知道誰是最勇敢的,於是它們比賽搬運一些物品。它們到了乙個倉庫,裡面有n個物品,每個物品都有乙個價值pi和重量wi,但是有些物品放在一起會 並且 具有傳遞性。a和b會 b和c會 則a和c會 機器人們可不想...