Pagini recente » Cod sursa (job #1959185) | Cod sursa (job #309685) | Cod sursa (job #1605535) | Cod sursa (job #2509604) | Cod sursa (job #3038205)
///edmons karp
#include<stdlib.h>
#include<stddef.h>
#include<stdio.h>
#define inf 1e9
#define N 1001
#define M 20001
int n , m , a , b , c , e , i , x , l , r , sz;
char viz[N];
int q[N] , t[N] , fl[N];
int v[N] , vf[N] , nxt[N];
int f[N][N];
char bfs(){
for(i = 1 ; i <= n ; ++ i)
viz[i] = 0;
l = 1 , r = 1;
q[1] = viz[1] = 1;
fl[n] = fl[1] = inf;
while(l <= r){
x = q[l++];
for(e = v[x] ; e ; e = nxt[e]){
i = vf[e];
if(f[x][i] > 0 && !viz[i]){
viz[i] = 1;
fl[i] = (fl[x] < f[x][i] ? fl[x] : f[x][i]);
t[i] = x;
q[++r] = i;
if(i == n)
return 1;
}
}
}
return 0;
}
int maxflow(){
int flow = 0;
while(bfs()){
flow += fl[n];
int x = n;
while(t[x]){
f[t[x]][x] -= fl[n];
f[x][t[x]] += fl[n];
x = t[x];
}
}
return flow;
}
void addl(int n1 , int n2){
vf[++sz] = n2;
nxt[sz] = v[n1];
v[n1] = sz;
}
int main(){
FILE *fin = fopen("maxflow.in" , "r");
FILE *fout = fopen("maxflow.out" , "w");
fscanf(fin , "%d%d" , &n , &m);
for(i = 1 ; i <= m ; ++ i){
fscanf(fin , "%d%d%d" , &a , &b , &c);
f[a][b] = c;
addl(a , b);
addl(b , a);
}
fprintf(fout , "%d\n" , maxflow());
return 0;
}