Pagini recente » Cod sursa (job #1520641) | Cod sursa (job #578345) | Cod sursa (job #1245672) | Cod sursa (job #1589039) | Cod sursa (job #1247861)
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
#define N 128
#define inf 1<<30
int cap[N][N] , flux[N][N];
int t[N];
int n,m,a,b,i,x,y,z;
bool bfs(int sursa,int destinatie){
int Q[N+1];
bool use[N];
memset( use , 0 , sizeof(use) );
memset( t , 0 , sizeof(t ) );
Q[0] = sursa;
use[sursa] = 1;
int p=0 , q=0;
int u;
while( p <= q ){
u = Q[p++];
for(i=sursa; i <= destinatie; ++i){
if( !use[i] )
if( cap[u][i] - flux[u][i] > 0 ){
Q[++q] = i;
t[i] = u;
use[i] = true;
}
}
}
if( t[destinatie] ) return 1;
return 0;
}
int edmond_karp(int sursa,int destinatie){
int flow=0;
int i,minn;
while( bfs(sursa,destinatie) ){
minn = inf ;
for( i = destinatie; t[i] ; i = t[i] ){
if( cap[ t[i] ][i] - flux[ t[i] ][i] < minn )
minn = cap[ t[i] ][i] - flux[ t[i] ][i]; }
for(i=destinatie; i ; i = t[i]){
flux[ t[i] ][i] +=minn;
flux[i][ t[i] ] -=minn;
}
flow += minn;
}
return flow;
}
int main()
{
freopen("maxflow.in" , "r" , stdin);
freopen("maxflow.out", "w" , stdout);
scanf("%d %d \n",&n,&m);
for(i=1;i<=m;++i){
scanf("%d %d %d\n",&x,&y,&z);
cap[x][y] = z;
cap[y][x] = z;
}
a = 1; b= n;
printf("%d" ,edmond_karp(a,b) );
return 0;
}