Cod sursa(job #1038839)

Utilizator ion824Ion Ureche ion824 Data 21 noiembrie 2013 23:56:29
Problema Flux maxim Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.52 kb
#include<fstream>
#include<vector>
#include<algorithm>
#include<cstring>
using namespace std;

const int INF = 0x3f3f3f3f;

int N,M,maxflow;
int C[1005][1005];
int Q[1005],from[1005];
bool viz[1005];
vector<int> V[1005];


bool bfs(){
    int ic=1,vc=1,prec;
    unsigned int i;
    bool found=0;
    Q[ic]=1;
    memset(viz,0,sizeof(viz));
    viz[1]=1;
    from[1]=-1;
    
    while(ic<=vc && !found)
    {
      prec=Q[ic++]; 
      
      for(i=0;i<V[prec].size();++i)
        if(C[prec][V[prec][i]] > 0 && !viz[V[prec][i]])
        {
          Q[++vc]=V[prec][i];
          viz[V[prec][i]]=1;
          from[V[prec][i]]=prec;
          if(V[prec][i] == N) found=1;                       
        }                 
    }
       
    if(!found) return 0;   
       
    int vf=N, mn=INF, prev;
    while(from[vf]!=-1)
    {
      prev=from[vf];
      if(C[prev][vf] < mn) mn=C[prev][vf];
      vf=prev;              
    }   
    
    vf=N;
    while(from[vf]!=-1)
    {
      prev=from[vf];
      C[prev][vf]-=mn;
      C[vf][prev]+=mn;
      vf=prev;     
    }
    
    if(mn!=INF){ maxflow += mn; return 1; }
      else return 0;   
}


int main(){
    ifstream cin("maxflow.in");
    ofstream cout("maxflow.out");
    int i,x,y,c;
    cin>>N>>M;
    
    for(i=1;i<=M;++i)
    {
      cin>>x>>y>>c;
      V[x].push_back(y);
      V[y].push_back(x);
      C[x][y]=c;                 
    }
    
    while(bfs()) ;
    
    cout<<maxflow;
    
    
 return 0;   
}