Pagini recente » Cod sursa (job #2573063) | Cod sursa (job #2420899) | Cod sursa (job #698460) | Cod sursa (job #2343789) | Cod sursa (job #1386240)
#include <fstream>
#include <vector>
using namespace std;
#define IN "maxflow.in"
#define OUT "maxflow.out"
#define INF (1<<30)
#define NMAX 1008
ifstream fin(IN);
ofstream fout(OUT);
int n, m;
int c[NMAX][NMAX];//capacitate
vector <int> g[NMAX];
int f[NMAX][NMAX];
inline int minim(int x, int y){if (x < y) return x; return y;}
int mar[NMAX];//marcaj
int ant[NMAX];
int co[NMAX];
int st, sf=-1;
int start, final;
void citire();
void showtime();
int bfs();
void init();
int main(){
citire();
showtime();
return 0;
}
void showtime(){
int flux, fmin;
int nod;
for (flux = 0; bfs(); flux += fmin){
fmin = INF;
for (nod = final; nod != start; nod = ant[nod])
fmin = minim(fmin, c[ant[nod]][nod] - f[ant[nod]][nod]);
for (nod = final; nod != start; nod = ant[nod]){
f[ant[nod]][nod] += fmin;
f[nod][ant[nod]] -= fmin;
}
}
fout <<flux<<'\n';
}
int bfs(){
sf = -1; st = 0;
co[++sf] = start;
int v, t;
int i, nr;
init();
while (st <= sf){
v = co[st++];
nr = g[v].size();
for (i = 0; i < nr; ++i){
t = g[v][i];
if (c[v][t] == f[v][t] || mar[t])
continue;
mar[t] = 1;
ant[t] = v;//anterioriul
co[++sf] = t;
if (t == final)
return 1;
}
}
return 0;
}
void init(){
int i;
for (i = 1; i <= n; ++i)
mar[i] = 0;
}
void citire(){
fin >>n>>m;
start = 1; final = n;
int i;
int x, y, z;
for (i = 1; i <= m; ++i){
fin >>x>>y>>z;
g[x].push_back(y);//g
g[y].push_back(x);
c[x][y] = z;
}
}