usaco
時間限制: 2 s
空間限制: 256000 kb
題目等級 : 鑽石 diamond
農夫約翰知道每一條排水溝每分鐘可以流過的水量,和排水系統的準確布局(起點為水潭而終點為小溪的一張網)。需要注意的是,有些時候從一處到另一處不只有一條排水溝。
根據這些資訊,計算從水潭排水到小溪的最大流量。對於給出的每條排水溝,雨水只能沿著乙個方向流動,注意可能會出現雨水環形流動的情形。
輸入描述 input description
第1行: 兩個用空格分開的整數n (0 <= n <= 200) 和 m (2 <= m <= 200)。n是農夫john已經挖好的排水溝的數量,m是排水溝交叉點的數量。交點1是水潭,交點m是小溪。
第二行到第n+1行: 每行有三個整數,si, ei, 和 ci。si 和 ei (1 <= si, ei <= m) 指明排水溝兩端的交點,雨水從si 流向ei。ci (0 <= ci <= 10,000,000)是這條排水溝的最大容量。
輸出描述 output description
輸出乙個整數,即排水的最大流量。
樣例輸入 sample input
5 41 2 40
1 4 20
2 4 20
2 3 30
3 4 10
樣例輸出 sample output
/*dinic演算法的基本思路:
1.根據殘量網路計算層次圖。
2.在層次圖中使用dfs進行增廣直到不存在增廣路。
3.重複以上步驟直到無法增廣。
殘量網路:包含反向弧的有向圖,dinic要迴圈的,每次修改過的圖都是殘量網路,
層次圖:分層圖,以[從原點到某點的最短距離]分層的圖,距離相等的為一層
dfs:這個就不用說了吧…
增廣 :在現有流量基礎上發現新的路徑,擴大發現的最大流量(注意:增加量不一定是這條路徑的流量,而是新的流量與上次流量之差)
增廣路:在現有流量基礎上發現的新路徑.(快來找茬,和上一條有何不同?)
剩餘流量:當一條邊被增廣之後(即它是增廣路的一部分,或者說增廣路通過這條邊),這條邊還能通過的流量.
反向弧:我們在dinic演算法中,對於一條有向邊,我們需要建立另一條反向邊(弧),當正向(輸入資料)邊剩餘流量減少i時,反向弧剩餘流量增加i
*/#include
#include
#include
#define maxn 2010
#define inf 9999185
using
namespace
std;
inthead[maxn],deep[maxn],q[maxn],vis[maxn];
int n,m,x,y,z,s=1
,cnt,num,ans;
struct
node
e[maxn
<<5
];inline
intinit()
while(c>='
0'&&c<='9')
return x*f;
}inline
void add(int
from,int to,int
dis)
int bfs()//
統計各點的層數 }}
return
false;}
int dfs(int now,int came_flow)//
now 是當前節點,came_flow是能流過來的流量,即當前點準備向外流的流量。
}if(!use_flow)//
優化 如果找到到不了匯點的點,就不管它。
deep[now]=-1
;
return
use_flow;
}int dicnic(int s,int
t)//
就一直流啊流啊流
}
return
tot;
}int
main()
ans=0
; ans=max(ans,dicnic(1
,m));
printf(
"%d\n
",ans);
return0;
}
codevs 1993草地排水
農夫約翰知道每一條排水溝每分鐘可以流過的水量,和排水系統的準確布局 起點為水潭而終點為小溪的一張網 需要注意的是,有些時候從一處到另一處不只有一條排水溝。根據這些資訊,計算從水潭排水到小溪的最大流量。對於給出的每條排水溝,雨水只能沿著乙個方向流動,注意可能會出現雨水環形流動的情形。輸入描述 inpu...
CODEVS 1993 草地排水
題目描述 description 農夫約翰知道每一條排水溝每分鐘可以流過的水量,和排水系統的準確布局 起點為水潭而終點為小溪的一張網 需要注意的是,有些時候從一處到另一處不只有一條排水溝。根據這些資訊,計算從水潭排水到小溪的最大流量。對於給出的每條排水溝,雨水只能沿著乙個方向流動,注意可能會出現雨水...
codevs1993 草地排水(最大流)
最近學了最大流,於是去codevs找了幾道最大流裸題 這是我第一次寫網路流 題目大意 求乙個圖的最大流 就是這樣的裸題 第一次a網路流的題,發個部落格紀念一下。var n,m,i,j,k,h,t,x,y,z,ans longint a array 0.410,0.410 of longint q,l...