Pagini recente » Cod sursa (job #3132923) | Cod sursa (job #2378305) | Cod sursa (job #2441223) | Cod sursa (job #3292577) | Cod sursa (job #387910)
Cod sursa(job #387910)
#include<stdio.h>
#include<vector>
#include<algorithm>
#define mp make_pair
#define pb push_back
#define N 1005
#define INF 0x3f3f3f3f
using namespace std;
int n, m, x, y, z, i, j, c[N][N], tata[N], q[N], ok, it, flux, minim, w;
vector< int > a[N];
int bfs(){
q[0] = 1; ok = 0;
memset(tata, 0, sizeof(tata));
for (int p = 0, u = 0; p <= u; p++){
x = q[p];
for (it = 0; it < a[x].size(); it++){
if (!tata[a[x][it]] && c[x][a[x][it]] > 0){
tata[a[x][it]] = x;
if (a[x][it] != n) q[++u] = a[x][it];
else ok = 1;
}
}
}
return ok;
}
int main(){
freopen("maxflow.in","r",stdin);
freopen("maxflow.out","w",stdout);
scanf("%d %d", &n, &m);
for (i = 1; i <= m; i++){
scanf("%d %d %d", &x, &y, &z);
a[x].pb(y);
a[y].pb(x);
c[x][y] = z;
}
flux = 0;
while (bfs()){
minim = INF;
for (w = 0; w < a[n].size(); w++){
if (tata[a[n][w]]){
minim = c[a[n][w]][n];
for (i = a[n][w]; i != 1; i = tata[i])
if (c[tata[i]][i] < minim) minim = c[tata[i]][i];
c[a[n][w]][n] -= minim; c[n][a[n][w]] += minim;
for (i = a[n][w]; i != 1; i = tata[i])
c[tata[i]][i] -= minim, c[i][tata[i]] += minim;
flux += minim;
}
}
}
printf("%d\n", flux);
return 0;
}