Pagini recente » Cod sursa (job #817964) | Cod sursa (job #453950) | Cod sursa (job #2945614) | Cod sursa (job #2083868) | Cod sursa (job #2476018)
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
//Edmond Karps algorithm
ifstream cin("maxflow.in");
ofstream cout("maxflow.out");
const int NMAX = 1007;
int pred[NMAX];
int flow[NMAX][NMAX];
int cap[NMAX][NMAX];
vector< int > g[NMAX];
int main()
{
int n, m; cin >> n >> m;
int x, y, c;
for(int i = 0; i < m; i++) {
cin >> x >> y >> c;
g[x].push_back(y);
g[y].push_back(x);
cap[x][y] += c;
}
int sumflow = 0;
do {
queue< int > q;
q.push(1);
for(int i = 0; i <= n; i++) pred[i] = 0;
pred[1] = 1;
while(!q.empty()) {
int curr = q.front();
q.pop();
for(int i = 0; i < g[curr].size(); i++) {
if(pred[g[curr][i]] == 0 && /*g[curr][i] != 1 &&*/ cap[curr][g[curr][i]] > flow[curr][g[curr][i]]) {
pred[g[curr][i]] = curr;
q.push(g[curr][i]);
}
}
}
if(pred[n] != 0) {
int df = 1e9+7;
for(int poz = n; poz != 1; poz = pred[poz]) {
df = min(df, cap[pred[poz]][poz] - flow[pred[poz]][poz]);
}
for(int poz = n; poz != 1; poz = pred[poz]) {
flow[pred[poz]][poz] += df;
flow[poz][pred[poz]] -= df;
}
sumflow += df;
}
} while(pred[n] != 0);
cout << sumflow;
}