Pagini recente » Cod sursa (job #1087303) | Cod sursa (job #570978) | Cod sursa (job #1798262) | Cod sursa (job #2959574) | Cod sursa (job #1747281)
#include<fstream>
#include<stdlib.h>
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
int n,m,cost[1001][1001],flux[1001][1001],v[1001];
int BFS(){
int i,coada[1001],p,u,x;
p=u=1;
coada[p]=1;v[1]=1;
while(p<=u && v[n]==0){
x=coada[p];
for (i=1;i<=n;i++)
if (v[i]==0){
if (flux[x][i]<cost[x][i]){
v[i]=x;u++;
coada[u]=i;
}
else
if (flux[i][x]>0){
v[i]=-x;
u++;coada[u]=i;
}
}
p++;
}
return v[n];
}
void Edmonds_Karp(){
int lant[1001],a,b,len,i,val;
do{
for (i=1;i<=n;i++)
v[i]=0;
if (BFS()==0) return;
lant[0]=n;len=0;a=900000000;b=900000000;
while(lant[len]!=1){
len++;
lant[len]=abs(v[lant[len-1]]);
if (v[lant[len-1]]>0) a=min(a,cost[lant[len]][lant[len-1]]-flux[lant[len]][lant[len-1]]);
else
b=min(b,flux[lant[len-1]][lant[len]]);
}
val=min(a,b);
for (i=len;i>0;i--)
if (v[lant[i-1]]>0) flux[lant[i]][lant[i-1]]+=val;
else
flux[lant[i-1]][lant[i]]-=val;
}while(0<1);
}
int main(){
fin>>n>>m;
int i,a,b;
for (i=1;i<=m;i++){
fin>>a>>b;
fin>>cost[a][b];
}
fin.close();
Edmonds_Karp();
int mflow=0;
for (i=1;i<=n;i++)
mflow=mflow+flux[i][n];
fout<<mflow;
fout.close();
return 0;
}