Pagini recente » Cod sursa (job #1597716) | Cod sursa (job #1891004) | Cod sursa (job #2053762) | Cod sursa (job #2105453) | Cod sursa (job #1212312)
#include <fstream>
#include <vector>
#include <cstring>
#define DIM 1010
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
vector<int> L[DIM];
int C[DIM][DIM], F[DIM][DIM];
int v[DIM], T[DIM], q[DIM];
int n, m, x, y, z, i, flux, minim;
int bfs() {
memset(v, 0, sizeof(v));
int p = 1, u = 1, x, y;
q[1] = 1;
v[1] = 1;
T[1] = 0;
while (p <= u) {
x = q[p];
for (int i=0;i<L[x].size();i++) {
y = L[x][i];
if (v[y] == 0 && C[x][y] > F[x][y]) {
u++;
q[u] = y;
T[y] = x;
v[y] = 1;
}
}
p++;
}
return v[n];
}
int main() {
fin>>n>>m;
for (i=1;i<=m;i++) {
fin>>x>>y>>z;
L[x].push_back(y);
L[y].push_back(x);
C[x][y] = z;
}
while (bfs()) {
for (int i=0;i<L[n].size(); i++) {
x = L[n][i];
if (v[x] == 1 && C[x][n] > F[x][n]) {
minim = C[x][n] - F[x][n];
while (T[x]) {
minim = min( minim, C[T[x]][x] - F[T[x]][x]);
x = T[x];
}
flux += minim;
x = L[n][i];
F[x][n] += minim;
F[n][x] -= minim;
while (T[x]) {
F[ T[x] ][x] += minim;
F[x][ T[x] ] -= minim;
x = T[x];
}
}
}
}
fout<<flux;
return 0;
}