Pagini recente » Cod sursa (job #949418) | Cod sursa (job #2503652) | Cod sursa (job #1984847) | Cod sursa (job #2103034) | Cod sursa (job #1917348)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#define NMAX 1005
#define INF 110001
using namespace std;
ifstream in("maxflow.in");
ofstream out("maxflow.out");
int c[NMAX][NMAX],f[NMAX][NMAX],n,m,x,y,u,z,viz[NMAX],path[NMAX];
vector<int> a[NMAX],tr[NMAX];
queue<int> coada;
bool bfs() {
for(int i=0;i<=n;i++) {
viz[i] = 0;
}
coada.empty();
coada.push(n);
int nod;
bool fnd = false;
while(!coada.empty() && !fnd) {
nod = coada.front(); coada.pop();
for(int i=0;i<tr[nod].size() && !fnd;i++) {
if(!viz[tr[nod][i]] && c[nod][tr[nod][i]]!=f[nod][tr[nod][i]]) {
coada.push(tr[nod][i]);
path[tr[nod][i]] = nod;
if(tr[nod][i] == 1) fnd = true;
}
}
}
return fnd;
}
int main()
{
in >> n >> m;
for(int i=0;i<m;i++) {
in >> x >> y >> z;
c[x][y] = z;
c[y][x] = z;
a[x].push_back(y);
tr[y].push_back(x);
}
int flow,fmin;
for(flow=0;bfs();flow+=fmin) {
fmin = INF;
for(int i=1;path[i]!=0;i=path[i]) {
x = i;
y = path[i];
fmin = min(fmin, c[x][y] - f[x][y]);
}
for(int i=1;path[i]!=0;i=path[i]) {
x = i;
y = path[i];
//cout << x << "-->" << y << "\n";
f[y][x] += fmin;
f[x][y] += fmin;
}
// for(int i=0;i<=n;i++) cout << path[i] << " ";
//cout << endl;
//cout << fmin << endl << endl;
}
out << flow;
return 0;
}