Cod sursa(job #276321)

Utilizator IoannaPandele Ioana Ioanna Data 11 martie 2009 08:29:16
Problema Flux maxim Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include<stdio.h>
#include<string.h>
#define INF 2000000000
int n,m;
int t[1001],q[1001];
long c[1001][1001],f[1001][1001];

void read()
{
scanf("%d%d",&n,&m);
int i;
int x,y,z;
for (i=1;i<=m;i++)
    {
     scanf("%d%d%d",&x,&y,&z);
     c[x][y]=z;
    }
}

int lee(int s,int d)
{
int st,dr,i;
memset(t,0,sizeof(t));
st=dr=1;
q[st]=s;
t[st]=-1;
while (st<=dr)
      {
       for (i=1;i<=n;i++)
           {
            if (c[q[st]][i] && !t[i])
               {
                q[++dr]=i;
                t[i]=q[st];
                if (q[dr]==d)
                    return 1;
               }
           }
       st++;
      }
return 0;
}

void fluxmax()
{
int i;
long flux,min,p=n;
for (flux=0;lee(1,n);flux+=min)
    {
     min=INF;
     p=n;
     while (p!=1)
           {
            if (c[t[p]][p]<min)
               min=c[t[p]][p];
            p=t[p];
           }
     p=n;
     while (p!=1)
           {
            f[t[p]][p]+=min;
            c[t[p]][p]-=min;
            p=t[p];
           }
    }
printf("%ld\n",flux);
}

int main()
{
freopen("maxflow.in","r",stdin);
freopen("maxflow.out","w",stdout);
read();
fluxmax();
return 0;
}