Cod sursa(job #475716)

Utilizator dornescuvladVlad Eugen Dornescu dornescuvlad Data 8 august 2010 02:20:51
Problema Flux maxim Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.29 kb
#include<iostream>
#include<fstream>
#include<vector>
#define Nmax 1005

using namespace std;

ifstream fin("maxflow.in");
ofstream fout("maxflow.out");

int C[Nmax][Nmax];
int F[Nmax][Nmax];
int qu[1005];
int ante[Nmax];
int viz[Nmax];
int N,M;
vector<int> G[Nmax];

int BFS()
{
	
	memset(viz, 0, sizeof(viz));
	int u,i,V;
    viz[1]=1;
    qu[0]=1;
    qu[1]=1;
    int alfa=1;

    while(alfa <= qu[0])
    {
        u=qu[alfa];
        alfa++;
        for(i=0;i<G[u].size();i++)
        { V=G[u][i];
			 
		if(viz[V] == 0)
           if(F[u][V] < C[u][V])
		   {
            
                viz[V]=1;
                ante[V]=u;
                qu[0]++;
                qu[qu[0]]=V;
                if(V==N)
                   return 1;
		   }
        }


    }
    return 0;

}

int main()
{ 	

	int i,flow,fmin;
	int x,y,z;
    
    fin>>N>>M;
    for(i=1;i<=M;i++)
	{
		fin>>x>>y>>z;
		C[x][y] =z;
		G[x].push_back(y);
		G[y].push_back(x);
	}

	for(flow=0;BFS();)
	{
		fmin = 2891821;
      for(i=N;i!=1;i=ante[i])
		fmin=min(fmin,C[ante[i]][i]-F[ante[i]][i]);
      for(i=N;i!=1;i=ante[i])
      {
		F[ante[i]][i]+=fmin;
		F[i][ante[i]]-=fmin;
      }
	  flow+=fmin;

	}
	fout<<flow<<"\n";
    fout.close();
    return 0;
}