Pagini recente » Cod sursa (job #347903) | Cod sursa (job #1969709) | Cod sursa (job #3271688) | Cod sursa (job #1460105) | Cod sursa (job #905018)
Cod sursa(job #905018)
#include <cstring>
#include <utility>
#include <fstream>
#include <queue>
#define oo int(2e9)
#define MAX 1010
#define mp make_pair
using namespace std;
bool viz[MAX];
int x, y, z, i, n, m, flow, last, solFlow, from[MAX], D[MAX], cap[MAX][MAX];
queue <int> Q;
bool BF()
{
memset(from, 0, sizeof(from));
Q.push(1);
from[1] = -1;
while(!Q.empty())
{
x = Q.front();
Q.pop();
for(i = 1; i <= n; i++)
if(cap[x][i] and !from[i])
{
from[i] = x;
Q.push(i);
}
}
return from[n];
}
int main()
{
ifstream fi("maxflow.in");
ofstream fo("maxflow.out");
fi >> n >> m;
for(i = 1; i <= m; i++)
{
fi >> x >> y >> z;
cap[x][y] = z;
cap[y][x] = 0;
}
while(BF())
{
for(last = 1; last <= n; last++)
if(cap[last][n] and from[last])
{
flow = cap[last][n];
for(i = last; from[i] != -1; i = from[i])
flow = min(flow, cap[from[i]][i]);
cap[last][n] -= flow; cap[n][last] += flow;
for(i = last; from[i] != -1; i = from[i])
cap[from[i]][i] -= flow, cap[i][from[i]] += flow;
solFlow += flow;
}
}
fo << solFlow << "\n";
return 0;
}