Pagini recente » Cod sursa (job #36344) | Cod sursa (job #3261174) | Cod sursa (job #5781) | Cod sursa (job #6823) | Cod sursa (job #269582)
Cod sursa(job #269582)
#include <fstream>
#include <vector>
#define Nmax 1001
#define inf 0x3f3f3f37
using namespace std;
vector < int > g[Nmax];
int N, M, i, x, y, c, flow, fmin;
int C[Nmax][Nmax], F[Nmax][Nmax], viz[Nmax], Q[Nmax];
fstream fin("maxflow.in", ios::in), fout("maxflow.out", ios::out);
int bf()
{
memset(viz,0,sizeof(viz));
int j;
for ( Q[0] = Q[1] = 1, viz[1]=-1, j = 1; j <= Q[0]; ++j )
{
x = Q[j];
for (i = 0; i<g[x].size(); ++i)
{
y = g[x][i];
if (C[x][y] == F[x][y] || viz[y]) continue;
viz[y] = x;
Q[++Q[0]] = y;
if (y == N) return 1;
}
}
return 0;
}
inline int min(int x, int y) { return x < y ? x : y; }
int main()
{
for ( fin >> N >> M; M; --M )
{
fin >> x >> y >> c;
g[x].push_back(y);
g[y].push_back(x);
C[x][y] += c;
}
for (; bf(); flow+=fmin)
{
for ( fmin = inf, x = N; viz[x] != -1; x = viz[x] )
fmin = min(fmin, C[ viz[x] ][x] - F[ viz[x] ][x]);
for (x = N; viz[x] != -1; x = viz[x])
{
F[viz[x]][x] += fmin;
F[x][viz[x]] -= fmin;
}
}
fout << flow;
return 0;
}