Pagini recente » Cod sursa (job #1182451) | Cod sursa (job #2015601) | Cod sursa (job #2181528) | Cod sursa (job #1519254) | Cod sursa (job #1873163)
#include <bits/stdc++.h>
using namespace std;
ifstream fi("maxflow.in");
ofstream fo("maxflow.out");
const int NMAX = 1024,
INF = 0x3f3f3f3f;
int ant;
vector<int> g[NMAX];
int flow[NMAX][NMAX],
cap[NMAX][NMAX],
far[NMAX],
gws[NMAX];
bool pump(int src, int snk) {
static int it = 0; ++it;
deque<int> q;
int u, now, res;
gws[src] = it;
q.push_back(src);
while (!q.empty()) {
u = q.front();
q.pop_front();
for (auto v: g[u]) if (gws[v] != it && cap[u][v] != flow[u][v]) {
q.push_back(v);
gws[v] = it;
far[v] = u; } }
if (gws[snk] < it)
return false;
res = INF;
for (now = snk; now != src; now = far[now])
res = min(res, cap[far[now]][now] - flow[far[now]][now]);
for (now = snk; now != src; now = far[now]) {
flow[far[now]][now]+= res;
flow[now][far[now]]-= res; }
ant+= res;
if (res == 0)
return false;
return true; }
int main(void) {
int n, m, u, v, c;
fi >> n >> m;
for (int i = 0; i < m; ++i) {
fi >> u >> v >> c;
cap[u][v]+= c;
g[u].push_back(v); }
while (pump(1, n));
fo << ant << '\n';
return 0; }