Pagini recente » Cod sursa (job #2885778) | Cod sursa (job #1922670) | Cod sursa (job #2389080) | Cod sursa (job #2597184) | Cod sursa (job #2577868)
#include <bits/stdc++.h>
#define pii pair <int, int>
#define x first
#define y second
using namespace std;
ifstream in("maxflow.in");
ofstream out("maxflow.out");
int n, m;
int level[1001], cap[1001][1001], flow[1001][1001];
vector <int> g[1001], g2[1001];
inline bool BFS() {
for (int i = 1; i <= n; ++i)
level[i] = -1;
queue <int> q;
q.push(1);
level[1] = 1;
while (!q.empty()) {
int nod = q.front();
q.pop();
for (auto vecin : g[nod]) {
if (level[vecin] == -1 && flow[nod][vecin] < cap[nod][vecin]) {
level[vecin] = level[nod] + 1;
q.push(vecin);
}
}
}
return (level[n] != -1);
}
inline int DFS(int nod, int val) {
if (nod == n)
return val;
int pump = 0, s = 0;
for (auto vecin : g[nod]) {
if (level[vecin] == level[nod] + 1 && flow[nod][vecin] < cap[nod][vecin]) {
int cur = min(val, cap[nod][vecin] - flow[nod][vecin]);
int pump = DFS(vecin, cur);
if (pump > 0) {
flow[nod][vecin] += pump;
flow[vecin][nod] -= pump;
return pump;
}
}
}
return 0;
}
int main() {
in >> n >> m;
for (int i = 1; i <= m; ++i) {
int x, y, c;
in >> x >> y >> c;
cap[x][y] = c;
g[x].push_back(y);
g[y].push_back(x);
}
int rez = 0;
while (BFS())
rez += DFS(1, 2e9);
return out << rez, 0;
}