Pagini recente » Cod sursa (job #2479168) | Cod sursa (job #2415730) | Cod sursa (job #1339990) | Cod sursa (job #1233761) | Cod sursa (job #2553460)
#include <bits/stdc++.h>
using namespace std;
ifstream in("maxflow.in");
ofstream out("maxflow.out");
int n, m;
int cap[1001][1001], flow[1001][1001];
int tata[1001];
bool f[1001];
vector <int> g[1001];
inline bool BFS() {
queue <int> q;
memset(f, 0, sizeof(f));
q.push(1);
f[1] = 1;
while (!q.empty()) {
int nod = q.front();
q.pop();
if (nod == n)
continue;
for (auto vecin : g[nod]) {
if (!f[vecin] && cap[nod][vecin] - flow[nod][vecin] > 0) {
q.push(vecin);
f[vecin] = 1;
tata[vecin] = nod;
}
}
}
return f[n];
}
int main() {
int x, y;
in >> n >> m;
for (int i = 1; i <= m; ++i) {
in >> x >> y;
in >> cap[x][y];
g[x].push_back(y);
g[y].push_back(x);
}
int rez = 0;
while (BFS()) {
for (auto v : g[n]) {
if (f[v] && cap[v][n] - flow[v][n] > 0) {
int cmin = INT_MAX;
tata[n] = v;
for (int i = n; i != 1 && cmin > 0; i = tata[i])
cmin = min(cmin, cap[tata[i]][i] - flow[tata[i]][i]);
if (cmin > 0) {
for (int i = n; i != 1; i = tata[i]) {
flow[tata[i]][i] += cmin;
flow[i][tata[i]] -= cmin;
}
rez += cmin;
}
}
}
}
return out << rez, 0;
}