Pagini recente » Cod sursa (job #2081454) | Cod sursa (job #2352846) | Cod sursa (job #936657) | Cod sursa (job #2650316) | Cod sursa (job #2207599)
#include <iostream>
#include <cstdio>
#include <vector>
#include <cstring>
#include <queue>
#include <limits.h>
#define NMAX 1010
using namespace std;
int G[NMAX][NMAX], rG[NMAX][NMAX];
int N, M;
bool bfs(int s, int t, int parent[]) {
int visited[NMAX];
memset(visited, 0, sizeof(visited));
queue<int> Q;
parent[s] = -1;
visited[s] = 1;
Q.push(s);
while(!Q.empty()) {
int nod = Q.front();
Q.pop();
for(int i=1;i <= N; i++)
if(visited[i] == 0 && rG[nod][i] > 0) {
visited[i] = 1;
Q.push(i);
parent[i] = nod;
}
}
return (visited[t] == true);
}
int maxFlow(int s, int t) {
int i, j;
for(i = 1; i<= N; i++)
for(j=1; j <= N;j++)
rG[i][j] = G[i][j];
int parent[NMAX], maxflow = 0;
while(bfs(s, t, parent)) {
int pathflow = INT_MAX;
for(i = t; i != s; i = parent[i]) {
j = parent[i];
pathflow = min(pathflow, rG[j][i]);
}
for(i = t; i != s; i = parent[i]) {
int j = parent[i];
rG[j][i] -= pathflow;
rG[i][j] += pathflow;
}
maxflow += pathflow;
}
return maxflow;
}
int main()
{
int a, b, cap;
freopen("maxflow.in","r",stdin);
freopen("maxflow.out","w",stdout);
cin>>N>>M;
for(int i=0;i < M;i++) {
cin>>a>>b>>cap;
G[a][b] = cap;
}
cout<<maxFlow(1, N);
}