Pagini recente » Cod sursa (job #2874097) | Cod sursa (job #2735707) | Cod sursa (job #67808) | Cod sursa (job #222997) | Cod sursa (job #2724504)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
int n, m, f[1024][1024], c[1024][1024], t[1024];
vector<int> g[1024];
int bfs() {
vector<bool> v(n+1, false);
queue<int> q;
q.push(1);
v[1] = true;
while(!q.empty()) {
int cur = q.front();
q.pop();
for(auto next: g[cur]) {
if(!v[next] && c[cur][next] > f[cur][next]) {
v[next] = true;
t[next] = cur;
if(next == n) return true;
q.push(next);
}
}
}
return false;
}
int main() {
fin >> n >> m;
while(m--) {
int a, b, cap;
fin >> a >> b >> cap;
g[a].push_back(b);
g[b].push_back(a);
c[a][b] += cap;
}
int flow, fmin;
for(flow = 0; bfs(); flow += fmin) {
fmin = 2e9;
for(int i = n; t[i]; i = t[i])
fmin = min(fmin, c[t[i]][i]-f[t[i]][i]);
for(int i = n; t[i]; i = t[i]) {
f[t[i]][i] += fmin;
f[i][t[i]] -= fmin;
}
}
fout << flow;
}