P1361 小M的作物 最小割

2022-05-01 15:42:09 字數 2204 閱讀 3911

小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。

非常好的網路流題  和善意的謊言有一點類似

這種二選一的一般將兩種選擇轉化為源點 和 匯點  然後求一下最小割就肯定是二選一了

比較難處理的是組合優惠

可以如下建圖:

黃邊c1 c2  藍邊為inf(不可減)  就完美的解決了

#includeusing

namespace

std;

//input by bxd

#define rep(i,a,b) for(int i=(a);i<=(b);i++)

#define repp(i,a,b) for(int i=(a);i>=(b);--i)

#define ri(n) scanf("%d",&(n))

#define rii(n,m) scanf("%d%d",&n,&m)

#define riii(n,m,k) scanf("%d%d%d",&n,&m,&k)

#define rs(s) scanf("%s",s);

#define ll long long

#define pb push_back

#define rep(i,n) for(int i=0;i

#define clr(a,v) memset(a,v,sizeof a)

/////////////////////////////////

/#define inf 0x3f3f3f3f

const

int n=4e5+44

;const

int m=4e6+54

;struct

edge e[m

<< 1

];int head[n], cnt = 1

;void add(int x, int y, int

z) ;

head[x] =cnt;

e[++cnt] = (edge);

head[y] =cnt;

}int

level[n];

bool bfs(int s, int

t) }

return

level[t];

}int dfs(int s, int t, int

flow)

}if (!ret) level[s] = 0

;

return

ret;

}int dinic(int s, int

t) int

n,m,s,t,t,a,b,c1,x,k,c2,sum;

intmain()

rep(i,

1,n)

ri(m);

rep(i,

1,m)

}cout

return0;

}

view code

最小割 P1361 小M的作物

p1361 小m的作物 建圖好題。思路 看得出來還是經典的兩者取一模型,也就是找出一種割邊方式,將點劃分為兩個集合,且割邊花費最小。但是給出的是收益而非費用,怎麼辦呢?最大收益 總收益 最小損失。總收益就是把題目給出的種a地種b地的收益以及組合的bonus全部加起來。最小損失就是跑最大流 最小割 將...

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

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

P1361 小M的作物

p1361 小m的作物 二者取其一型別的網路流題 不同的集合,向對應元素連去不同 收益 容量的邊 對於那些神奇的組合,我們只需要按照以下方式建立兩個點 x 向 s 連一條在a時的額外收益 2.x x 注意順序,x 是其有向邊的起點,x 是其有向邊的終點 向其後繼節點連 inf 容量的邊,保證不會出現...