1752 小M 的作物 crop

2021-09-29 14:50:39 字數 1978 閱讀 1929

題目描述

小m 還是個特麼喜歡玩mc 的孩紙。。。

小m 在mc 裡開闢了兩塊巨大的耕地a和b(你可以認為容量是無窮),現在,小p有nn中作物的種子,每種作物的種子有11個 ( 就是可以種一棵作物) (用1 …n 1…n 編號),現在,第 ii 種作物種植在a中種植可以獲得 a_iai​

的收益,在b 中種植可以獲得 b_ibi​

的收益,而且,現在還有這麼一種神奇的現象,就是某些作物共同種在一塊耕地中可以獲得額外的收益,小m 找到了規則中共有 mm 種作物組合,第 ii 個組合中的作物共同種在a 中可以獲得c1_ic1i​

的額外收益,共同總在b 中可以獲得c2_ic2i​

的額外收益,所以,小m很快的算出了種植的最大收益,但是他想要考考你,你能回答他這個問題麼?

輸入格式

第一行包括乙個整數 nn

第二行包括nn 個整數,表示a_iai​

第三行包括nn 個整數,表示b_ibi​

第四行包括乙個整數mm

接下來mm 行,對於接下來的第ii 行:第乙個整數k_iki​

,表示第ii個作物組合中共有k_iki​

種作物,

接下來兩個整數c1_ic1i​

,c2_ic2i​

,接下來k_iki​

個整數,表示該組合中的作物編號。

輸出格式

只有一行,包括乙個整數,表示最大收益

樣例樣例輸入

34 2 1

2 3 2

12 3 2 1 2

樣例輸出

11資料範圍與提示

【樣例解釋】

a 耕地種1,2,b 耕地種3,收益4+2+3+2=11。

【資料範圍與約定】

對於20%的資料,1 \le k < n , 0 < m \le 10 1≤k**

kpmcup#0

最小割模板題:

二選一時,最小割。

同時集合內任意乙個點選對面,必須捨棄集合,不然不滿足割。

注意:在乙個圖中,割去權值和最小的邊集,使這個圖分成

兩個部分,切下來的那一刀叫做最小割。最小割並不唯一,但它在數值上是等於最大流的。

#include

#include

#include

#include

#include

#include

#define n 10005

using

namespace std;

const

int inf=

1<<29;

int head[n]

,nex[

4400000

],ver[

4400000

],edge[

4400000];

int tot=

1,d[n]

,s,n,m,t;

inline

void

add(

int x,

int y,

int z)

queue<

int> q;

bool

bfs()}

return0;

}int

dinic

(int x,

int flow)

return flow-rest;

}int a[n]

,b[n]

;int

main()

for(

int i=

1;i<=m;

++i)

}// cout0,flow=0;

while

(bfs()

)while

(flow=

dinic

(s,inf)

)maxflow+

=flow;

// coutreturn0;

}

3438 小M的作物

time limit 10 sec memory limit 256 mb submit 1078 solved 468 submit status discuss 小m在mc裡開闢了兩塊巨大的耕地a和b 你可以認為容量是無窮 現在,小p有n中作物的種子,每種作物的種子 有1個 就是可以種一棵作物 ...

題解 小M的作物

題目戳我 text 這題要求最大收穫,可以轉化為所有可能的收益減去最小割。單個點很好連邊 s to pos to t 問題在於如何處理組合的點。觀察到,乙個組合要不然全部都劃分到某乙個集合,要不然不做貢獻。注意到組合裡面的點是不能拆開的。所以我們建立乙個組合虛點,它連線所有組合內的點,邊權是 inf...

BZOJ3438 小M的作物

bzoj3438 小m的作物 小m在mc裡開闢了兩塊巨大的耕地a和b 你可以認為容量是無窮 現在,小p有n中作物的種子,每種作物的種子有1個 就是可以種一棵作物 用1.n編號 現在,第i種作物種植在a中種植可以獲得ai的收益,在b中種植可以獲得bi的收益,而且,現在還有這麼一種神奇的現象,就是某些作...