Pagini recente » Cod sursa (job #743570) | Cod sursa (job #3154147) | Cod sursa (job #3264628) | Cod sursa (job #311744) | Cod sursa (job #2767917)
#include <iostream>
#include <fstream>
#include <vector>
#include <cstring>
const int NMAX = 1e3;
int s, d;
std::vector<int> graph[1 + NMAX];
int cap[1 + NMAX][1 + NMAX];
bool vis[1 + NMAX];
int t[1 + NMAX];
bool dfs(int node) {
if (node == d)
return true;
vis[node] = true;
for (auto& nb : graph[node]) {
if (!vis[nb] && cap[node][nb] > 0) {
t[nb] = node;
if (dfs(nb))
return true;
}
}
return false;
}
int main() {
std::ifstream in("maxflow.in");
std::ofstream out("maxflow.out");
int n, m;
in >> n >> m;
for (int i = 1; i <= m; ++i) {
int x, y, c;
in >> x >> y >> c;
graph[x].push_back(y);
graph[y].push_back(x);
cap[x][y] += c;
}
s = 1;
d = n;
int maxFlow = 0;
while (dfs(s)) {
int min = 1e9;
for (int current = d; current != s; current = t[current])
min = std::min(min, cap[t[current]][current]);
for (int current = d; current != s; current = t[current]) {
cap[t[current]][current] -= min;
cap[current][t[current]] += min;
}
maxFlow += min;
memset(vis, 0, sizeof(vis));
}
out << maxFlow << '\n';
return 0;
}