Cod sursa(job #882910)

Utilizator zeeboBuzatu Vlad zeebo Data 19 februarie 2013 16:00:54
Problema Flux maxim Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include <fstream>

using namespace std;

ifstream f("maxflow.in");
ofstream g("maxflow.out");

int T[10001],n,m,x,y,c,C[1001][1001],F[1001][1001],s,d;

int min (int x, int y)
{
    if (x<y) return x;
return y;
}

bool BFS (int s, int d)
{
    int st=1,dr=1,i,nod,Q[10001];
    Q[1]=s, T[s]=-1;
    for (i=2;i<=n;i++) T[i]=0;

    while (st<=dr)
    {
       nod=Q[st];
       for (i=1;i<=n;i++)
         if (!T[i] && C[nod][i] > F[nod][i])
         {
             Q[++dr]=i;
             T[i]=nod;
             if (i==d) return true;
         }
         st++;
    }

return false;
}

void FLUX ()
{
   int flux=0,i,s=1,d=n;

   while ( BFS (1,n) )
   {
       int r=9999999;

       i=d;
       while (i!=s)  r=min(r,C[T[i]][i]-F[T[i]][i]), i=T[i];

       i=d;
       while (i!=s)  F[T[i]][i]+=r, F[i][T[i]]-=r, i=T[i];

       flux+=r;
   }

g<<flux<<'\n';
}

int main ()
{
    f>>n>>m;
    for (int i=1;i<=m;i++)
    {
        f>>x>>y>>c;
        C[x][y]=c;
    }

FLUX();

return 0;
}