Pagini recente » Cod sursa (job #1935052) | Cod sursa (job #3207500) | Cod sursa (job #1428936) | Cod sursa (job #2413512) | Cod sursa (job #2886464)
#include <bits/stdc++.h>
using namespace std;
const int N = 1005;
const int inf = 1e9;
int c[N][N];
int f[N][N];
int prv[N];
int viz[N];
vector <int> g[N];
int n, m;
int bfs()
{
queue <int> q;
for (int i = 1; i <= n; i++)
viz[i] = 0;
viz[1] = 1;
q.push(1);
while (!q.empty())
{
int x = q.front();
q.pop();
for (auto y : g[x])
{
if (viz[y] || c[x][y] == f[x][y])
continue;
viz[y] = 1;
prv[y] = x;
q.push(y);
if (y == n)
return 1;
}
}
return 0;
}
int main()
{
freopen("maxflow.in", "r", stdin);
freopen("maxflow.out", "w", stdout);
cin >> n >> m;
for (int i = 1; i <= m; i++)
{
int a, b, cp;
cin >> a >> b >> cp;
g[a].push_back(b);
g[b].push_back(a);
c[a][b] += cp;
}
int max_flow = 0;
while (bfs())
{
int fmin = inf;
for (int i = n; i != 1; i = prv[i])
fmin = min(fmin, c[prv[i]][i] - f[prv[i]][i]);
for (int i = n; i != 1; i = prv[i])
{
f[prv[i]][i] += fmin;
f[i][prv[i]] -= fmin;
}
max_flow += fmin;
}
cout << max_flow;
return 0;
}