Pagini recente » Cod sursa (job #1758496) | Cod sursa (job #849241) | Cod sursa (job #3242304) | Cod sursa (job #2383839) | Cod sursa (job #2699505)
#include <cstdio>
#include <vector>
#include <queue>
#define N 1001
#define INF 1000000000
using namespace std;
vector<int> ad[N];
int c[N][N], f[N][N], t[N], viz[N];
void citire(int &n, int &m)
{
int i, x, y, cp;
scanf("%d %d", &n, &m);
for (i = 0; i < m; i++) {
scanf("%d %d %d", &x, &y, &cp);
ad[x].push_back(y);
ad[y].push_back(x);
c[x][y] = cp;
}
}
int bfs(int n)
{
queue<int> q;
int u, v, i;
for (i = 1; i <= n; i++)
viz[i] = 0;
q.push(1), viz[1] = 1;
while (!q.empty()) {
u = q.front();
q.pop();
for (i = 0; i < ad[u].size(); i++) {
v = ad[u][i];
if (c[u][v] == f[u][v] || viz[v])
continue;
q.push(v), viz[v] = 1;
t[v] = u;
if (v == n)
return 1;
}
}
return 0;
}
int main()
{
freopen("maxflow.in", "r", stdin);
freopen("maxflow.out", "w", stdout);
int n, m, flux, fmin, i;
citire(n, m);
flux = 0;
while (bfs(n)) {
fmin = INF;
for (i = n; i != 1; i = t[i])
fmin = min(fmin, c[t[i]][i] - f[t[i]][i]);
for (i = n; i != 1; i = t[i]) {
f[t[i]][i] += fmin;
f[i][t[i]] -= fmin;
}
flux += fmin;
}
printf("%d\n", flux);
return 0;
}