Pagini recente » Cod sursa (job #207325) | Cod sursa (job #2046918) | Cod sursa (job #575093) | Cod sursa (job #1730740) | Cod sursa (job #3037934)
#include<algorithm>
#include<fstream>
#include<vector>
#include<queue>
#define inf 1e9
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
int const N = 1001;
int n , m , a , b , c;
int lv[N];
int f[N][N];
bool bfs(){
queue<int> q;
fill(lv , lv + 1 + n , inf);
lv[1] = 0;
q.push(1);
while(!q.empty()){
int x = q.front();
q.pop();
for(int i = 1 ; i <= n ; ++ i){
if(lv[i] == inf && f[x][i] > 0){
lv[i] = 1 + lv[x];
q.push(i);
}
}
}
return lv[n] != inf;
}
int dfs(int x , int fl){
if(x == n)return fl;
for(int i = 1 ; i <= n ; ++ i){
if(f[x][i] > 0 && lv[i] == 1 + lv[x]){
int z = dfs(i , min(fl , f[x][i]));
if(z){
f[x][i] -= z;
f[i][x] += z;
return z;
}
lv[i] = inf;
}
}
return 0;
}
int maxflow(){
int flow = 0;
while(bfs()){
int fx(0);
do{
fx = dfs(1 , inf);
flow += fx;
}while(fx != 0);
}
return flow;
}
int main(){
fin >> n >> m;
for(int i = 1 ; i <= m ; ++ i){
fin >> a >> b >> c;
f[a][b] += c;
}
fout << maxflow() << '\n';
return 0;
}