Pagini recente » Cod sursa (job #2102229) | Cod sursa (job #1286785) | Cod sursa (job #1145050) | Cod sursa (job #2546620) | Cod sursa (job #1873035)
#include<bits/stdc++.h>
#define oo 0x3f3f3f3f
using namespace std;
const int NMAX = 1e3 + 5;
int mat[NMAX][NMAX];
queue<int>Q;
int N, M, parent[NMAX];
bool visited[NMAX];
void citire()
{
freopen("maxflow.in", "r", stdin);
freopen("maxflow.out", "w", stdout);
scanf("%d%d", &N, &M);
for(int i = 1; i <= M; i++)
{
int x, y, flow;
scanf("%d%d%d", &x, &y, &flow);
mat[x][y] = flow;
}
}
void initialize()
{
memset(visited, false, sizeof(visited));
while(!Q.empty()) Q.pop();
int start_point = 1;
Q.push(start_point);
visited[start_point] = true;
parent[start_point] = -1;
}
bool bfs()
{
initialize();
while(!Q.empty())
{
int u = Q.front();
Q.pop();
for(int v = 1; v <= N; v++)
{
if(!visited[v] && mat[u][v] > 0)
{
visited[v] = true;
Q.push(v);
parent[v] = u;
}
}
}
return (visited[N] == true);
}
int ford_fulkerson()
{
int u, v, max_flow = 0;
int s, t;
t = N; s = 1;
while(bfs())
{
int path_flow = INT_MAX;
for(v = t; v != s; v = parent[v])
{
u = parent[v];
path_flow = min(path_flow, mat[u][v]);
}
for(v = t; v != s; v = parent[v])
{
u = parent[v];
mat[u][v] -= path_flow;
mat[v][u] += path_flow;
}
max_flow += path_flow;
}
return max_flow;
}
int main()
{
citire();
printf("%d", ford_fulkerson());
return 0;
}