Acdream 1171 Matrix sum 上下界費用流
題目鏈接:點擊打開鏈接
Time Limit: 8000/4000MS (Java/Others)Memory Limit: 128000/64000KB (Java/Others)
SubmitStatisticNext
Problem
Problem Description
sweet和zero在玩矩陣游戲,sweet畫了一個N * M的矩陣,矩陣的每個格子有一個整數。zero給出N個數Ki,和M個數Kj,zero要求sweet選出一些數,滿足從第 i 行至少選出了Ki個數,第j列至少選出了Kj個數。 這些數之和就是sweet要付給zero的糖果數。sweet想知道他至少要給zero多少個糖果,您能幫他做出一個最優策略嗎?
Input
首行一個數T(T <= 40),代表數據總數,接下來有T組數據。
每組數據:
第一行兩個數N,M(1 <= N,M <= 50)
接下來N行,每行M個數(范圍是0-10000的整數)
接下來一行有N個數Ki,表示第i行至少選Ki個元素(0 <= Ki <= M)
最後一行有M個數Kj,表示第j列至少選Kj個元素(0 <= Kj <= N)
Output
每組數據輸出一行,sweet要付給zero的糖果數最少是多少
Sample Input
1
4 4
1 1 1 1
1 10 10 10
1 10 10 10
1 10 10 10
1 1 1 1
1 1 1 1
Sample Output
6
n行作為左端點 m作為右端點建一個二部圖
n個點連到源點 流量為inf ,費用為0
m個點連到匯點 流量為inf 費用為0
n個點和m個點之間連一條費用為 mp[i][j] ,流量為1的點
--------------------------- 以上是普通建圖-----------------------
為了達到有下界的效果
給下界對應的點加一個費用為-inf,流量為ki的邊,這樣讓費用流強制把所有費用為-inf的邊先跑
意思也就是先使得下界的邊滿流。
當費用>0時, 說明這次跑的邊中不存在有下界的邊,那麼就相當於下界的邊已經滿流,所以直接終止費用流
#include
#include
#include
#include
#include
#include