Pagini recente » Cod sursa (job #1400356) | Cod sursa (job #2719013) | Cod sursa (job #2926644) | Cod sursa (job #2946752) | Cod sursa (job #2953593)
#include <bits/stdc++.h>
using namespace std;
ifstream in("maxflow.in");
ofstream out("maxflow.out");
const int Nmax = 1e3 + 5;
int G[Nmax][Nmax];
int T[Nmax];
bool seen[Nmax];
int N, M, MaxFlow;
bool BFS()
{
queue<int> Q;
Q.push(1);
memset(seen,0,sizeof(seen));
seen[1] = 1;
while(!Q.empty())
{
int u = Q.front();
if(u == N)
break;
Q.pop();
for(int i = 1; i <= N; ++i)
if(!seen[i] && G[u][i] > 0)
{
T[i] = u;
seen[i] = 1;
Q.push(i);
}
}
return seen[N];
}
int main()
{
in >> N >> M;
while(M--)
{
int from, to, capacity;
in >> from >> to >> capacity;
G[from][to] = capacity;
}
while(BFS())
{
for(int i = 1; i <= N; ++i)
{
if(!G[i][N] || !seen[i])
continue;
T[N] = i;
int flowPath = INT_MAX;
for(int v = N; v != 1; v = T[v]) flowPath = min(flowPath, G[T[v]][v]);
if(!flowPath)
continue;
for(int v = N; v != 1; v = T[v])
{
int u = T[v];
G[u][v] -= flowPath;
G[v][u] += flowPath;
}
MaxFlow += flowPath;
}
}
out << MaxFlow;
return 0;
}