Pagini recente » Cod sursa (job #42687) | Cod sursa (job #2078256) | Cod sursa (job #1474848) | Cod sursa (job #487508) | Cod sursa (job #630217)
Cod sursa(job #630217)
#include <stdio.h>
#define nd 1001
#define inf 1999999999
int tata[nd],cap[nd][nd],flux[nd][nd],n,min;
int bfs()
{ int v,pr,u,c[nd],viz[nd],i;
for(i=1;i<=n;i++)
viz[i]=tata[i]=0;
pr=u=1;
c[pr]=1;
while(pr<=u)
{
v=c[pr];
for(i=1;i<=n;i++)
if(viz[i]==0)
{
if(cap[v][i]>flux[v][i]) { u++; c[u]=i; tata[i]=v; viz[i]=1;
}
}
pr++;
}
if(tata[n]!=0)return 1;
else return 0;
}
int main()
{ int x2,x1,c1,i,maxflow,m,min,j;
freopen("maxflow.in","r",stdin);
freopen("maxflow.out","w",stdout);
scanf("%d %d\n",&n,&m);
for(i=1;i<=m;i++)
{
scanf("%d %d %d\n",&x1,&x2,&c1);
cap[x1][x2]=c1;
flux[x1][x2]=0;
}
maxflow=0;
while(bfs()==1)
{
for(i=1;i<n;i++)
if(cap[i][n]-flux[i][n]>0)
{
min=inf;
for(j=i;j!=1;j=tata[j])
if(cap[tata[j]][j]-flux[tata[j]][j]<min)min=cap[tata[j]][j]-flux[tata[j]][j];
if(min!=inf)
{
flux[i][n]+=min;
flux[n][i]-=min;
for(j=i;j!=1;j=tata[j])
{
flux[tata[j]][j]+=min;
flux[j][tata[j]]-=min;
}
}
maxflow+=min;
}
}
printf("%d",maxflow);
fclose(stdin);
fclose(stdout);
return 0;
}