Pagini recente » Cod sursa (job #5876) | Cod sursa (job #2515468) | Cod sursa (job #444812) | Cod sursa (job #850046) | Cod sursa (job #520532)
Cod sursa(job #520532)
#include<stdio.h>
#include<stdlib.h>
#define dim 1005
using namespace std;
int F[dim][dim],C[dim][dim],x,y,c,n,m,i,min,v[dim],viz[dim],fl;
void bfs()
{int i,j,p;
v[1]=1; viz[1]=1; i=1; j=1;
while(i<=j && !viz[n])
{x=v[i];
for(p=1;p<=n;p++)
if(C[x][p]>F[x][p] && !viz[p])
{j++; v[j]=p; viz[p]=x;}
else if(F[p][x]>0 && !viz[p])
{j++; v[j]=p; viz[p]=-x;}
i++;}
}
int main()
{
FILE *f=fopen("maxflow.in","r"), *g=fopen("maxflow.out","w");
fscanf(f,"%d%d",&n,&m);
for(i=1;i<=m;i++)
{fscanf(f,"%d%d%d",&x,&y,&c);
C[x][y]=c;}
while(1)
{bfs();
if(!viz[n]) break;
min=99999999;
for(i=n;i>1;i=abs(viz[i]))
{x=abs(viz[i]);
if(viz[i]>0)
{if(C[x][i]-F[x][i]<min) min=C[x][i]-F[x][i];}
else
if(F[i][x]<min) min=F[i][x];
}
for(i=n;i>1;i=abs(viz[i]))
{x=abs(viz[i]);
if(viz[i]>0) F[x][i]+=min;
else F[i][x]-=min;}
for(i=1;i<=n;i++) viz[i]=0;
}
for(i=1;i<=n;i++)
fl+=F[1][i];
fprintf(g,"%d\n",fl);
fclose(f);
fclose(g);
return 0;
}