Pagini recente » Cod sursa (job #2283758) | Cod sursa (job #795153) | Cod sursa (job #1628440) | Cod sursa (job #2938630) | Cod sursa (job #1917074)
#include <fstream>
#include <iostream>
#include <vector>
#include <queue>
#include <cstring>
using namespace std;
ifstream f("maxflow.in");
ofstream g("maxflow.out");
vector <int> ls[1005];
const int mod = 6005, f_mare = 1000000002;
bool incoada[1005], viz[1005];
int cap[1005][1005], x, y, c, n, m, i, j, v;
int flx[1005][1005], tt[1005];
int coada[mod], st, dr, fmin, sol;
bool parcurg() {
int i, j, l, y;
memset(viz, 0, sizeof(viz));
queue<int>q;
q.push(1);
viz[1] = 1;
while (q.empty()==0) {
x = q.front();q.pop();
l = ls[x].size();
if (x==n) continue;
for (i = 0; i < l; i++) {
y = ls[x][i];
if (cap[x][y] - flx[x][y] > 0 && viz[y] == 0) {
tt[y] = x;
viz[y] = 1;
q.push(y);
}
}
}
return viz[n];
}
int main() {
f >> n >> m;
while (m--) {
f >> x >> y >> c;
ls[x].push_back(y);
ls[y].push_back(x);
cap[x][y] += c;
}
while (parcurg() == 1) {
bool ok = 0;
for (i = 0; i < ls[n].size(); i++) {
y = ls[n][i];
if (cap[y][n] - flx[y][n] > 0) {
tt[n] = y;
v = n;
ok = 0;
fmin = f_mare;
while (v > 1 && ok == 0) {
c = cap[tt[v]][v] - flx[tt[v]][v];
if (c <= 0)
ok = 1;
fmin = min(fmin, c);
v = tt[v];
}
if (ok) continue;
v = n;
while (v >1) {
flx[tt[v]][v] += fmin;
flx[v][tt[v]] -= fmin;
v = tt[v];
}
sol += fmin;
}
}
}
g << sol;
return 0;
}