Pagini recente » Cod sursa (job #1847249) | Cod sursa (job #2376094) | Cod sursa (job #2502955) | Cod sursa (job #1299900) | Cod sursa (job #2736887)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
int n, m;
vector<int> g[1005];
int c[1005][1005], f[1005][1005], t[1005];
bool v[1005];
bool bfs() {
for(int i = 1; i <= n; i++) {
v[i] = t[i] = 0;
}
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 u, v, cap;
fin >> u >> v >> cap;
g[u].push_back(v);
g[v].push_back(u);
c[u][v] = cap;
}
int flow = 0, fmin;
for( ; bfs(); ) {
for(auto next: g[n]) {
if(!v[next] || c[next][n] <= f[next][n]) continue;
t[n] = next;
fmin = 2e9;
for(int i = n; i != 1; i = t[i]) {
fmin = min(fmin, c[t[i]][i]-f[t[i]][i]);
}
for(int i = n; i != 1; i = t[i]) {
f[t[i]][i] += fmin;
f[i][t[i]] -= fmin;
}
flow += fmin;
}
}
fout << flow << '\n';
}