Pagini recente » Cod sursa (job #30547) | Cod sursa (job #2193213) | Cod sursa (job #1510752) | Cod sursa (job #2361772) | Cod sursa (job #1566172)
#include <iostream>
#include <fstream>
#include <queue>
using namespace std;
vector<int> V[1005];
int c[1005][1005];
int f[1005][1005];
int maxFlow, n;
queue<int> q;
int prec[1005];
bool bfs() {
q.push(1); //start
while(!q.empty()) {
int cur = q.front(); q.pop();
for(int j = 0; j < V[cur].size(); j ++) {
int i = V[cur][j];
if(c[cur][i] && c[cur][i] > f[cur][i] && !prec[i]) {
prec[i] = cur, q.push(i);
if(i == n) {
while(!q.empty()) q.pop();
return true;
}
}
}
}
return false;
}
int main()
{
ifstream d("maxflow.in");
ofstream g("maxflow.out");
int m, x, y, z; d >> n >> m;
for(int i = 1; i <= m; i ++) {
d >> x >> y >> z;
c[x][y] = z;
V[x].push_back(y);
V[y].push_back(x);
}
while(bfs()) {
int cur = c[prec[n]][n] - f[prec[n]][n];
for(int i = prec[n]; prec[i]; i = prec[i])
cur = min(cur, c[prec[i]][i] - f[prec[i]][i]);
for(int i = n; prec[i]; i = prec[i]) {
f[prec[i]][i] += cur;
f[i][prec[i]] -= cur;
}
for(int i = 1; i <= n; i ++) prec[i] = 0;
maxFlow += cur;
}
g << maxFlow << "\n";
return 0;
}