Pagini recente » Cod sursa (job #2948448) | Cod sursa (job #1168612) | Cod sursa (job #2645539) | Cod sursa (job #1045851) | Cod sursa (job #287624)
Cod sursa(job #287624)
#include <fstream.h>
#define Nmax 1001
#define inf 1<<30
ifstream in("maxflow.in");
ofstream out("maxflow.out");
int n,m,flux,min;
int C[Nmax][Nmax], F[Nmax][Nmax],viz[Nmax],Q[Nmax],d[Nmax];
void citire(){
int x,y,c,i,j;
in>>n>>m;
while(in>>x>>y>>c)C[x][y] = c;
}
int bfs(){
int p,u,i;
p = u = 1;
Q[p] = 1;
viz[i] = 1;
d[1] = inf;
while(p<=u){
for(i=1;i<=n;++i)
if(!viz[i] && C[Q[p]][i]-F[Q[p]][i] > 0){
viz[i] = Q[p];
Q[++u] = i;
if(d[Q[p]] < C[Q[p]][i] - F[Q[p]][i])
d[i] = d[Q[p]];
else d[i] = C[Q[p]][i] - F[Q[p]][i];
if(i==n) return 0;
}
p++;
}
}
void init(){
for(int i=1;i<=n;++i) d[i] = viz[Nmax] = Q[i] = 0;
}
void ek(){
int i,j;
do{
init();
bfs();
if(viz[n]){
min = inf;
i = n; j = d[i];
/*while(j!=0){
if(C[j][i]-F[j][i] < min) min = C[j][i]-F[j][i];
i = j;
j = d[i];
} */
i = n; j = viz[i]; min = d[n];
while(j!=0){
F[j][i] += min;
F[i][j] -= min;
//out<<j<<" "<<i<<" "<<min<<",";
i = j;
j = viz[i];
}
//out<<"\n";
flux += min;
}
}while(viz[n]);
}
void afisare(){
out<<flux;
}
int main(){
citire();
ek();
afisare();
return 0;
}