Pagini recente » Cod sursa (job #2874762) | Cod sursa (job #2581416) | Cod sursa (job #3232700) | Cod sursa (job #2851673) | Cod sursa (job #3125687)
#include <bits/stdc++.h>
using namespace std;
const string taskname("maxflow");
ifstream fin(taskname + ".in");
ofstream fout(taskname + ".out");
const int N = 5 + 1000;
vector<int> g[N];
int C[N][N], F[N][N];
int n, m, tata[N];
bitset<N> vis;
bool bfs(int from, int to) {
vis.reset();
vis[from] = 1;
queue<int> q;
q.emplace(from);
while (!q.empty()) {
int u = q.front();
q.pop();
if (u == to) continue;
for (auto v : g[u])
if (!vis[v] && F[u][v] < C[u][v]) {
vis[v] = 1;
tata[v] = u;
q.emplace(v);
}
}
return vis[to];
}
int main() {
fin >> n >> m;
while (m--) {
int u, v, w;
fin >> u >> v >> w;
g[u].emplace_back(v);
g[v].emplace_back(u);
C[u][v] += w;
}
int ans = 0;
while (bfs(1, n)) {
int flux = 1e9;
for (int i = n; i != 1; i = tata[i])
flux = min(flux, C[tata[i]][i] - F[tata[i]][i]);
for (int i = n; i != 1; i = tata[i]) {
F[tata[i]][i] += flux;
F[i][tata[i]] -= flux;
}
ans += flux;
}
fout << ans;
}