Pagini recente » Cod sursa (job #2619231) | Cod sursa (job #3033185) | Cod sursa (job #2663648) | Cod sursa (job #2934942) | Cod sursa (job #3033303)
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define eb emplace_back
const string TASK("maxflow");
ifstream fin(TASK + ".in");
ofstream fout(TASK + ".out");
const int N = 1005;
int c[N][N], f[N][N], t[N];
vector<int> g[N];
int n, m;
bitset<N> vis;
bool bfs(int src, int dest) {
vis.reset();
vis[src] = 1;
queue<int> q;
q.push(src);
while (!q.empty()) {
int u = q.front();
q.pop();
if (u == dest) continue;
for (auto v : g[u])
if (!vis[v] && c[u][v] > 0) {
vis[v] = 1;
t[v] = u;
q.push(v);
}
}
return vis[dest];
}
int maxflow(int src, int dest) {
int ans = 0;
while (bfs(src, dest)) {
for (auto u : g[dest]) {
if (!vis[u] || c[u][dest] <= 0)
continue;
t[dest] = u;
int flux = 1e9;
for (int i = dest; i != src; i = t[i])
flux = min(flux, c[t[i]][i]);
for (int i = dest; i != src; i = t[i]) {
c[t[i]][i] -= flux;
c[i][t[i]] += flux;
}
ans += flux;
}
}
return ans;
}
int main() {
fin >> n >> m;
for (int u, v, w, i = 1; i <= m; ++i) {
fin >> u >> v >> w;
g[u].eb(v);
g[v].eb(u);
c[u][v] += w;
}
fout << maxflow(1, n);
}