Pagini recente » Cod sursa (job #2697714) | Cod sursa (job #1849818) | Cod sursa (job #2511792) | Cod sursa (job #487615) | Cod sursa (job #2234306)
#include <bits/stdc++.h>
using namespace std;
int n, m;
vector<int>g[1002];
int c[1002][1002], f[1002][1002], p[1002], ans;
bool viz[1002];
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
bool bfs () {
memset(viz, 0, sizeof(viz));
viz[1] = 1;
queue<int>q;
q.push(1);
while (!q.empty()) {
int u = q.front();
q.pop();
if (u == n)
continue;
for (auto v: g[u]) {
if (c[u][v] > f[u][v] && !viz[v]) {
viz[v] = 1;
q.push(v);
p[v] = u;
}
}
}
return viz[n];
}
int main()
{
fin >> n >> m;
for (int i = 1; i <= m; i++) {
int x, y, z;
fin >> x >> y >> z;
c[x][y] = z;
g[x].push_back(y);
g[y].push_back(x);
}
while (bfs()) {
for (int i = 0; i < g[n].size(); i++) {
int v = g[n][i];
if (c[v][n] > f[v][n] && viz[v]) {
p[n] = v;
int fmin = 1000000000;
for (int i = n; i != 1; i = p[i])
fmin = min(fmin, c[p[i]][i] - f[p[i]][i]);
for (int i = n; i != 1; i = p[i]) {
f[p[i]][i] += fmin;
f[i][p[i]] -= fmin;
}
ans += fmin;
}
}
}
fout << ans;
return 0;
}