題目描述
小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的收益,而且,現在還有這麼一種神奇的現象,就是某些作...