Cod sursa(job #1103984)

Utilizator radu2004GOLD radu radu2004 Data 10 februarie 2014 11:10:14
Problema Flux maxim Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include <stdio.h>
#include <vector>
#include <deque>
#include <string.h>

using namespace std;
FILE *f,*g;
vector <int> v[1005];
deque <int> q;
int n,m,c1,c[1005][1005],t[1005],i,s,d,min1,flux;
int bf ()
{
    memset (t,0,sizeof (t));
    int nod;
    t[1]=-1;
    q.push_back (s);
    while (! q.empty())
    {
        nod=q.front ();
        for (int j=0;j<v[nod].size ();j++)
        {
            int x=v[nod].at (j);
            if (c[nod][x]>0 && t[x]==0)
            {
                q.push_back (x);
                t[x]=nod;
            }
        }
       q.pop_front ();
    }
    if (t[d]!=0) return 1;
          else return 0;
}
int main()
{f=fopen ("maxflow.in","r");
 g=fopen ("maxflow.out","w");
 fscanf (f,"%d%d",&n,&m);
 int x,y;
 s=1;
 d=n;
 for (i=1;i<=m;i++)
 {
     fscanf (f,"%d%d%d",&x,&y,&c1);
     c[x][y]=c1;
     v[x].push_back(y);
 }

 while (bf())
 {
     i=d;
     min1=1000000;
     while (i!=s)
     {
         if (c[t[i]][i]<min1) min1 =c[t[i]][i];
         i=t[i];
     }
     flux+=min1;
     i=d;

     while (i!=s)
      {

        c[t[i]][i]-=min1;
        i=t[i];
      }
 }
 fprintf (g,"%d",flux);
    return 0;
}