Cod sursa(job #765469)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 7 iulie 2012 19:58:14
Problema Flux maxim Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include<cstdio>
int n,m,w[1001],g[1001][1001],d[1001],e[1001][1001],b[1001],c[1001],p,q,t,i,j,l,k;
int main()
{freopen("maxflow.in","r",stdin);
freopen("maxflow.out","w",stdout);
scanf("%d%d",&n,&m);
while(m--)
     scanf("%d%d%d",&i,&j,&k),g[i][++w[i]]=j,e[i][j]=k;
while(1)      
     {for(i=1;i<=n;i++)
           b[i]=0;
     d[1]=1000001,p=q=0,c[q++]=1;
     while(p<q&&!b[n])
           {t=c[p++];
           for(i=1;i<=w[t];i++)
           if(!b[g[t][i]]&&e[t][g[t][i]])
                 b[c[q++]=g[t][i]]=t,d[g[t][i]]=d[t]<e[t][g[t][i]]?d[t]:e[t][g[t][i]];}
     if(!b[n])
           break;
     for(l=n;l>1;l=b[l])
           e[b[l]][l]-=d[n],g[b[l]][++w[b[l]]]=l,g[l][++w[l]]=b[l],e[l][b[l]]+=d[n];}
for(j=0,i=1;i<=n;i++)
     j+=e[1][i];
printf("%d",j);    
return 0;}