Pagini recente » Cod sursa (job #1269421) | Cod sursa (job #2212334) | Cod sursa (job #1999144) | Cod sursa (job #304124) | Cod sursa (job #519906)
Cod sursa(job #519906)
#include<stdio.h>
#define dim 1005
using namespace std;
int c[dim][dim],fl[dim][dim],marc[dim],p,poz[dim],v[dim],n,x,m,i,y,a,flux;
void bk()
{int i,j,x,k;
v[1]=1; //marc[1]=1;
i=1; j=1;
while(i<=j && !marc[n])
{x=v[i];
for(k=1;k<=n;k++)
if(c[x][k]>fl[x][k] && !marc[k])
{j++; v[j]=k; marc[k]=x; poz[j]=i;}
i++;
}
p=j;
}
void ek()
{int i,min=56895889;
i=p;
while(poz[i]>0)
{x=c[marc[v[i]]][v[i]]-fl[marc[v[i]]][v[i]];
if(x<min) min=x;
i=poz[i];}
i=p;
while(poz[i]>0)
{fl[marc[v[i]]][v[i]]+=min;
i=poz[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,&a); c[x][y]=a;}
while(1)
{bk();
if(marc[n]==0) break;
ek();
for(i=1;i<=n;i++) {marc[i]=0; poz[i]=0;}
}
for(i=1;i<=n;i++) flux+=fl[1][i];
fprintf(g,"%d\n",flux);
fclose(f);
fclose(g);
return 0;
}