Cod sursa(job #1938704)

Utilizator danutbodbodnariuc danut danutbod Data 25 martie 2017 00:48:46
Problema Flux maxim Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include <fstream>
using namespace std;
 #define MAX 1003
ifstream f("maxflow.in");
ofstream g("maxflow.out");
 int M[MAX][MAX];
int infinit=100000000;
bool viz[MAX];
int n,m;
int T[MAX];

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);
           T[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 i=n;
    while (i!=1){
        fmax=min(fmax,M[T[i]][i]);
        i=T[i];
    }
    i=n;
    while (i!=1){
       M[T[i]][i]-=fmax;
       M[i][T[i]]+=fmax;
       i=T[i];
     }
    flux_final+=fmax;
  }
  g<<flux_final<<'\n';
}