Cod sursa(job #1938701)

Utilizator dutzulBodnariuc Dan Alexandru dutzul Data 25 martie 2017 00:38:28
Problema Flux maxim Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 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){ 
        if (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';

}