Pagini recente » Cod sursa (job #1727116) | Cod sursa (job #204383) | Cod sursa (job #659692) | Cod sursa (job #1647169) | Cod sursa (job #2456623)
#include <bits/stdc++.h>
using namespace std;
int n, m;
int cap[1005][1005];
int flow[1005][1005];
int T[1005];
bool seen[1005];
vector<int> G[1005];
bool bfs() {
fill_n(T, 1005, 0);
fill_n(seen, 1005, 0);
queue<int> Q;
Q.push(1);
seen[1] = 1;
while (Q.size()) {
int u = Q.front();
Q.pop();
if (u == n) continue;
for (auto p : G[u]) {
if (flow[u][p] < cap[u][p] && !seen[p]) {
T[p] = u;
Q.push(p);
seen[p] = 1;
}
}
}
return seen[n];
}
int main() {
ios_base::sync_with_stdio(false);
ifstream cin("maxflow.in");
ofstream cout("maxflow.out");
cin >> n >> m;
while (m--) {
int a, b, z;
cin >> a >> b >> z;
cap[a][b] = z;
G[a].push_back(b);
G[b].push_back(a);
}
int maxflow = 0;
while (bfs()) {
for (auto node : G[n]) {
if (seen[node]) {
int minflow = 1 << 30;
T[n] = node;
for (int i = n; i > 1; i = T[i])
minflow = min(minflow, cap[T[i]][i] - flow[T[i]][i]);
for (int i = n; i > 1; i = T[i])
flow[T[i]][i] += minflow, flow[i][T[i]] -= minflow;
maxflow += minflow;
}
}
}
cout << maxflow << "\n";
}