Pagini recente » Cod sursa (job #1487782) | Cod sursa (job #2703623) | Cod sursa (job #2329406) | Cod sursa (job #2977185) | Cod sursa (job #2697651)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("maxflow.in");
ofstream fout ("maxflow.out");
int n, m, dist[1002], c[1002][1002], flux[1002][1002], d[1002], p[1002];
bool viz[1002];
vector<int>G[1002];
bool bfs () {
queue<int>q;
q.push(1);
memset(viz, 0, sizeof(viz));
viz[1] = 1;
while (q.size()) {
int x = q.front();
q.pop();
for (int it : G[x])
if (flux[x][it] < c[x][it] && !viz[it]) {
d[it] = d[x] + 1;
p[it] = x;
q.push(it);
viz[it] = 1;
}
}
return viz[n];
}
int main () {
fin >> n >> m;
for (int i = 0; i < m; i++) {
int x, y, z;
fin >> x >> y >> z;
G[x].push_back(y);
G[y].push_back(x);
c[x][y] = z;
}
int ans = 0;
while (bfs()) {
for (auto it : G[n]) {
if(viz[it] && flux[it][n] < c[it][n]) {
p[n] = it;
int fmin = 1e9;
for (int nod = n; nod != 1; nod = p[nod])
fmin = min(fmin, c[p[nod]][nod] - flux[p[nod]][nod]);
for (int nod = n; nod != 1; nod = p[nod]) {
flux[p[nod]][nod] += fmin;
flux[nod][p[nod]] -= fmin;
}
ans += fmin;
}
}
}
fout << ans;
return 0;
}