Pagini recente » Cod sursa (job #471177) | Cod sursa (job #779225) | Cod sursa (job #2493683) | Cod sursa (job #2472433) | Cod sursa (job #1501321)
#include <stdio.h>
#include <queue>
#include <string.h>
#define NMAX 1005
#define inf 0x3f3f3f3f
using namespace std;
int N, M;
int C[NMAX][NMAX], flux[NMAX][NMAX];
int tata[NMAX];
queue <int> q;
int bfs(){
int nod;
for(;!q.empty(); q.pop());
memset(tata, 0, sizeof(tata));
q.push(1);
while(!q.empty()){
nod = q.front();
q.pop();
for(int i = 1; i <= N; ++i)
if(!tata[i] && C[nod][i] > flux[nod][i]){
q.push(i);
tata[i] = nod;
if(i == N) return 1;
}
}
return 0;
}
int main(){
freopen("maxflow.in", "r", stdin);
freopen("maxflow.out", "w", stdout);
int r, i, x, y, c, fx;
scanf("%d %d", &N, &M);
for(int i = 1; i <= M; ++i){
scanf("%d %d %d", &x, &y, &c);
C[x][y] += c;
}
for(fx = 0; bfs(); fx += r){
r = inf;
i = N;
while(i != 1){
r = min(r, C[tata[i]][i] - flux[tata[i]][i]);
i = tata[i];
}
i = N;
while(i != 1){
if(C[tata[i]][i] > 0){
C[tata[i]][i] -= r;
flux[i][tata[i]] += r;
}else
flux[tata[i]][i] -= r;
i = tata[i];
}
}
printf("%d\n", fx);
return 0;
}