Cod sursa(job #1939015)

Utilizator dutzulBodnariuc Dan Alexandru dutzul Data 25 martie 2017 13:21:14
Problema Flux maxim Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#include <bits/stdc++.h>
using namespace std;
 
ifstream f("maxflow.in");
ofstream g("maxflow.out");
 
#define LE 1066
int M[LE][LE];
int infinit=100000000;
bool viz[LE];
int n,m;
int father[LE];
 
void dfs(int nod){
   viz[nod]=true;
 
   for(int i=1;i<=n;++i){
      if (viz[i]==false&&M[nod][i]>0){ 
           dfs(i);
           father[i]=nod;     
        }
      }
   }
}
 
 
int main(){
  f>>n>>m;
   
  for(int i=1;i<=m;++i){
     int xx,yy,cc;
     f>>xx>>yy>>cc;
     M[xx][yy]=cc;
  }
 
  int flux_final=0;
 
  while (true){
    for(int i=1;i<=n;++i){
       viz[i]=false;
    }
    dfs(1);
    
    if (viz[n]==false){
       break;
    }
 
    int fmax=infinit;
    int node=n; 
    while (node!=1){
        fmax=min(fmax,M[father[node]][node]);
        node=father[node];
    }
 
    node=n;
    while (node!=1){
       M[father[node]][node]-=fmax;
       M[node][father[node]]+=fmax;
       node=father[node];
     }
      
     flux_final+=fmax;
  }
  
    
  g<<flux_final<<'\n';
 
}