小m在mc裡開闢了兩塊巨大的耕地a和b(你可以認為容量是無窮),現在,小p有n中作物的種子,每種作物的種子有1個(就是可以種一棵作物)(用1...n編號)。
現在,第i種作物種植在a中種植可以獲得ai的收益,在b中種植可以獲得bi的收益,而且,現在還有這麼一種神奇的現象,就是某些作物共同種在一塊耕地中可以獲得額外的收益,小m找到了規則中共有m種作物組合,第i個組合中的作物共同種在a中可以獲得c1i的額外收益,共同總在b中可以獲得c2i的額外收益。
小m很快的算出了種植的最大收益,但是他想要考考你,你能回答他這個問題麼?
第一行包括乙個整數n
第二行包括n個整數,表示ai第三行包括n個整數,表示bi第四行包括乙個整數m接下來m行,
對於接下來的第i行:第乙個整數ki,表示第i個作物組合中共有ki種作物,
接下來兩個整數c1i,c2i,接下來ki個整數,表示該組合中的作物編號。
只有一行,包括乙個整數,表示最大收益
輸入 #1複製
34 2 1
2 3 2
12 3 2 1 2
輸出 #1複製
11
樣例解釋
a耕地種1,2,b耕地種3,收益4+2+3+2=11。
資料範圍與約定
1<=k< n<= 1000,0 < m < = 1000 保證所有資料及結果不超過2*10^9。
思路
如果把農作物作為中間點,農場 a 設為源, b 設為匯。
因為對於每個農作物只能種在乙個農場中,所以該題可以等效為乙個最小割模型。
所以如何對 bonus 的組合建邊是關鍵。
把整個組合點集看作是乙個點並拆成出入兩點,由a有一條到入點的路,且從出點有一條到b的路,再逐次將待加入的點新增進點集就可以了。
這樣能獲得的最大值就是總價值 - 最小割
code
#include
<
cstdio
>
#include
<
iostream
>
#include
<
cstring
>
#include
<
queue
>
#include
<
vector
>
#include
<
algorithm
>
using
namespace std;
const
int maxn =1e
6+7;
const
int inf =
0x3f3f3f3f
;template
<
class t>
inline
void
read(t &
res)
struct edge;
struct isap
void
addegde(
intfrom
,intto,
intcap));
edges
.push_back((edge));
int m =
edges
.size();
g[from].push_back(m-2);
g[to].push_back(m-1);
}int
augment()
x=t;
while(x != s)
return a;
}int
maxflow()
bool ok =0;
for(
int i =
cur[x]; i <
g[x].size(); i++)}
if(!ok)
num[
d[x]]--;
if(!
num[
d[x]])
break;
d[x]
= m+1;
num[
d[x]]++;
cur[x]=0
;if(x != s) x =
edges[p
[x]].
from;}
}return flow;
}}isap;
int n, p, q;
int s, t;
int tot =0;
int m;
intmain()
for(
int i =
1; i <= n;
++i )
read(m);
for(
int i =
1; i <= m;
++i )
}//cout << tot << " ! " << isap.maxflow() << endl;
int mincut =
isap
.maxflow();
printf("%d
\n",tot - mincut);
return0;
}
P1361 小M的作物
p1361 小m的作物 二者取其一型別的網路流題 不同的集合,向對應元素連去不同 收益 容量的邊 對於那些神奇的組合,我們只需要按照以下方式建立兩個點 x 向 s 連一條在a時的額外收益 2.x x 注意順序,x 是其有向邊的起點,x 是其有向邊的終點 向其後繼節點連 inf 容量的邊,保證不會出現...
P1361 小M的作物
小m在mc裡開闢了兩塊巨大的耕地a和b 你可以認為容量是無窮 現在,小p有n中作物的種子,每種作物的種子有1個 就是可以種一棵作物 用1.n編號 現在,第i種作物種植在a中種植可以獲得ai的收益,在b中種植可以獲得bi的收益,而且,現在還有這麼一種神奇的現象,就是某些作物共同種在一塊耕地中可以獲得額...
P1361 小M的作物 最小割
小m在mc裡開闢了兩塊巨大的耕地a和b 你可以認為容量是無窮 現在,小p有n中作物的種子,每種作物的種子有1個 就是可以種一棵作物 用1.n編號 現在,第i種作物種植在a中種植可以獲得ai的收益,在b中種植可以獲得bi的收益,而且,現在還有這麼一種神奇的現象,就是某些作物共同種在一塊耕地中可以獲得額...