Vijos P1250 最勇敢的機械人

2021-07-22 16:53:34 字數 1667 閱讀 6391

p1250最勇敢的機械人

accepted

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行

為最大可能價值

3 10 1

100 1

200 5

10 5

1 2

210

每個測試點1s

wind

這是乙個簡單的

分組揹包

,只是題目並沒有給分組,只是給出了分組的條件

那麼就得自己用並查集分組,就好
分完組之後就是乙個分組揹包,詳情請見揹包九講之分組揹包
**:

#include 

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define maxn (1000 + 20) #define inf 0x3f3f3f3f #define pi acos(-1.0) using namespace std; typedef long long int lli; struct node op[maxn]; int maps[maxn]; int dp[maxn]; vector

zu[1010]; int find_father(int n) int main() for(int i = 1; i <= n; i ++) maps[i] = i; for(int i = 1; i <= k; i ++) for(int i = 1; i <= n; i ++) for(int k = 1; k <= n; k ++) } } printf("%d\n",dp[wmax]); return 0; } //link=""

vijos 1250 最勇敢的機械人

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

vijos1250 最勇敢的機械人

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

最勇敢的機械人

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