Pagini recente » Cod sursa (job #2928736) | Cod sursa (job #1623827) | Cod sursa (job #958427) | Cod sursa (job #1709607) | Cod sursa (job #2811405)
#include <bits/stdc++.h>
using namespace std;
const int N = 1005;
const int inf = 2e9;
int cap[N][N];
int flx[N][N];
int prv[N];
vector <int> g[N];
int d[N], n;
int bfs()
{
for (int i = 2; i <= n; i++)
d[i] = inf;
queue <int> q;
q.push(1);
while (!q.empty())
{
int x = q.front();
q.pop();
for (auto y : g[x])
{
if (1 + d[x] < d[y] && flx[x][y] < cap[x][y])
{
d[y] = d[x] + 1;
q.push(y);
prv[y] = x;
}
}
}
if (d[n] != inf)
return 1;
return 0;
}
int main()
{
freopen("maxflow.in", "r", stdin);
freopen("maxflow.out", "w", stdout);
int m, f = 0;
cin >> n >> m;
while(m--)
{
int x, y;
cin >> x >> y;
cin >> cap[x][y];
g[x].push_back(y);
g[y].push_back(x);
}
while(bfs())
{
int minim = inf;
for (int i = n; i > 1; i = prv[i])
minim = min(minim, cap[prv[i]][i] - flx[prv[i]][i]);
for (int i = n; i != 1; i = prv[i])
{
flx[prv[i]][i] += minim;
flx[i][prv[i]] -= minim;
}
f += minim;
}
cout << f;
return 0;
}