Pagini recente » Cod sursa (job #768780) | Cod sursa (job #471704) | Cod sursa (job #1391980) | Cod sursa (job #439523) | Cod sursa (job #1905657)
#include<bits/stdc++.h>
using namespace std;
FILE *in = fopen("maxflow.in", "r");
FILE *out = fopen("maxflow.out", "w");
const int NMAX = 1e3 + 5;
queue<int>Q;
int mat[NMAX][NMAX], N, M, parent[NMAX];
bool visited[NMAX];
void read()
{
fscanf(in, "%d%d", &N, &M);
for(int i = 1; i <= M; i ++)
{
int x, y, z;
fscanf(in, "%d%d%d", &x, &y, &z);
mat[x][y] = z;
}
}
void initialize()
{
int start_point = 1;
memset(visited, false, sizeof(visited));
Q.push(start_point);
visited[start_point] = true;
parent[start_point] = -1;
}
bool bfs()
{
initialize();
while(!Q.empty())
{
int node = Q.front();
Q.pop();
for(int v = 1; v <= N; v++){
if( !visited[v] && mat[node][v] > 0 )
{
visited[v] = true;
parent[v] = node;
Q.push(v);
}
}
}
return (visited[N] == true);
}
int edmondKarp()
{
int maxFlow, flow;
int s, t;
s = 1; t = N;
maxFlow = 0;
while(bfs())
{
int Min = 0x3f3f3f3f;
for(int v = t; v != s; v = parent[v])
{
int u = parent[v];
flow = min( flow, mat[u][v] );
}
maxFlow += flow;
for(int v = t; v != s; v = parent[v])
{
int u = parent[v];
mat[u][v] -= flow;
mat[v][u] += flow;
}
}
return maxFlow;
}
int main()
{
read();
fprintf(out, "%d", edmondKarp());
return 0;
}