★★☆ 輸入檔案:flowa.in
輸出檔案:flowa.out
簡單對比
時間限制:1 s 記憶體限制:128 mb
【問題描述】
bob 覺得一般圖的最大流問題太難了,他不知道如何解決,於是他想嘗試乙個簡單點的:柵格網路中的最大流問題,這個雖說簡單了一點,但對 bob 來說依舊太難,現在他有個麻煩需要你幫忙:給你乙個 n*m 的柵格(如下所示),柵格中的邊表示可以流水的管道,邊上的數字表示管道的容量,舉例說明:在下面圖( 2.6.1 )中, (0,0) 和 (1,0) 之間邊的容量為 6 ,這意味著這條邊(水管)的最大水流量不超過 6 個單位。
n=3 m=3
圖 2.6.1 柵格網路流
那麼柵格中從 s 到 t 的最大流是多少呢 ? 換句話說 , 某一時刻最多能有多少單位的水從 s 流向 t?
【輸入格式】
輸入檔案的第一行是乙個正整數 t ,表示接下來有多少組測試資料。
每一組測試資料的第一行有兩個正整數 n,m(1<=n,m<=100)
接著有兩個矩陣h(n*(m-1)),v((n-1)*m),h[i][j]表示(i,j)->(i,j+1)的流量;
v[i][j]表示(i,j)->(i+1,j)的流量。
【輸出格式】
每一組測試資料輸出只有一行,包含乙個整數,即從 s(0,0) 到 t(n-1,m-1) 的柵格網路的最大流,不允許出現多餘的空格。
【輸入樣例】
輸入檔名: flowa .in
13 3
0 12 3
4 56 7 8
9 10 11
輸出檔名: flowa .out
6n=3 m=3
圖 2.6.2 乙個解決方案
1/*2網格圖的最小割問題
3很明顯如果寫最大流一定會超時,所以可以利用最大流最小割定理解決。
4我們可以在某條邊i的兩側加兩個點,連一條邊j,使兩條邊切割,這樣建圖的話,最小割就等於新圖的最短路,
5只要多加起點和終點就可以跑最短路了。
6dijkstral+堆優化
7用最短路來處理 最小割 好像只適用於 網格最小割 8*/
9 #include10 #include11 #include12 #include13 #include14
using
namespace
std;
15#define n 20010
16#define inf 100000000000000ll
17#define ll long long
18int
head[n],n,m,tot,ans,s,t; ll dis[n];
19struct
edgee[n*4
];22
int make_hao(int i,int j)
23void add_edge(int u,int v,int
w)27
void
dijkstra()39}
40}41 cout<
43void
solve()
52for(int i=2;i<=n;i++)
53for(int j=1,x;j<=m;j++)
58for(int i=2;i<=m;i++)add_edge(s,i,0
);59
for(int i=2*m+2;i<=t-2;i+=(m+1))add_edge(s,i,0
);60
for(int i=m+2;i<=t-2;i+=(m+1))add_edge(i,t,0
);61
for(int i=n*(m+1)+2;i<=t-2;i++)add_edge(i,t,0
);62
dijkstra();63}
64int
main()
72return0;
73 }
COGS461 網路流24題 餐巾
問題描述 乙個餐廳在相繼的n天裡,第i天需要ri塊餐巾 i l,2,n 餐廳可以從三種途徑獲得餐巾。1 購買新的餐巾,每塊需p分 2 把用過的餐巾送到快洗部,洗一塊需m天,費用需f分 f 3 把餐巾送到慢洗部,洗一塊需n天 n m 費用需s分 s在每天結束時,餐廳必須決定多少塊用過的餐巾送到快洗部,...
網路流 24 題
1 搭配飛行員 題意 n個飛行員,其中有m名飛行員是正駕駛員。飛機每架有兩個駕駛員,需乙個正駕駛員和乙個副駕駛員。由於種種原因,例如相互配合的問題,有些駕駛員不能在同一架飛機上飛行,問如何搭配駕駛員才能使出航的飛機最多。思路 裸二分圖匹配 最大流 題 版本一 網路流做法 引入源點s 0以及匯點t n...
網路流24題
學會網路流演算法後,我們要做的就是把問題轉化成網路流問題。求二分圖最大匹配。網路流建模要找到問題的關鍵特點,用連邊,流量 以及費用 把原問題轉化成網路流問題,包括最大流,最小割,費用流。二分圖最大匹配的特點是每個點最多屬於一條匹配邊。這相當於是說,每個點只能流過一次。要求的是最大匹配,可以得出建模為...