P1361 小M的作物 網路流 最小割

2022-05-18 05:42:07 字數 2712 閱讀 2567

小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複製

3

4 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的收益,而且,現在還有這麼一種神奇的現象,就是某些作物共同種在一塊耕地中可以獲得額...