Pagini recente » Cod sursa (job #2279528) | Cod sursa (job #896890) | Cod sursa (job #2023379) | Cod sursa (job #204974) | Cod sursa (job #520531)
Cod sursa(job #520531)
#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[v[i]]))
{x=abs(viz[v[i]]);
if(viz[v[i]]>0)
{if(C[x][v[i]]-F[x][v[i]]<min) min=C[x][v[i]]-F[x][v[i]];}
else
if(F[v[i]][x]<min) min=F[v[i]][x];
}
for(i=n;i>1;i=abs(viz[v[i]]))
if(viz[v[i]]>0) F[viz[v[i]]][v[i]]+=min;
else F[v[i]][viz[i]]-=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;
}