Pagini recente » Cod sursa (job #2693245) | Cod sursa (job #2949820) | Cod sursa (job #1519223) | Cod sursa (job #616324) | Cod sursa (job #2817864)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("maxflow.in");
ofstream fout ("maxflow.out");
int flow[1002][1002], c[1002][1002], dist[1002], par[1002], viz[1002], n, m;
vector<int>G[1002];
bool bfs () {
for (int i = 1; i <= n; i++) {
dist[i] = 1e9;
viz[i] = 0;
}
queue<int>q;
viz[1] = 1;
dist[1] = 0;
q.push(1);
while (q.size()) {
int nod = q.front();
q.pop();
if (nod == n)
break;
for (auto it : G[nod]) {
if (!viz[it] && flow[nod][it] < c[nod][it]) {
viz[it] = 1;
q.push(it);
par[it] = nod;
dist[it] = dist[nod] + 1;
}
}
}
return viz[n];
}
int main()
{
fin >> n >> m;
for (int i = 1; i <= m; i++) {
int x, y, cap;
fin >> x >> y >> cap;
G[x].push_back(y);
G[y].push_back(x);
c[x][y] = cap;
}
int ans = 0;
while (bfs()) {
for (auto it : G[n]) {
if (flow[it][n] < c[it][n] && viz[it]) {
par[n] = it;
int fmin = 1e9;
for (int nod = n; nod != 1; nod = par[nod]) {
fmin = min(fmin, c[par[nod]][nod] - flow[par[nod]][nod]);
}
for (int nod = n; nod != 1; nod = par[nod]) {
flow[par[nod]][nod] += fmin;
flow[nod][par[nod]] -= fmin;
}
ans += fmin;
}
}
}
fout << ans;
return 0;
}