Cod sursa(job #3259972)

Utilizator mmocanuMocanu Mihai-Adrian mmocanu Data 28 noiembrie 2024 17:19:00
Problema Flux maxim Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.07 kb
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <vector>
#define MAXN 1003
#define INFI 1000'000'009
using namespace std;

vector <int> graf[MAXN];

int much[MAXN][MAXN];
int seen[MAXN];
int n,m;

int DFS(int node,int mi){
  int aux;

  seen[node]=1;
  if(node==n){
    return mi;
  }

  for(int neigh : graf[node]){
    if(much[node][neigh]>0 && seen[neigh]==0){
      aux=DFS(neigh,min(mi,much[node][neigh]));
      seen[neigh]=0;
      if(aux!=-1){
        much[node][neigh]-=aux;
        much[neigh][node]+=aux;
        return aux;
      }
    }
  }

  return -1;
}

int main(){
  int i,a,b,val,aux,s;
  FILE *fin,*fout;
  fin=fopen("maxflow.in","r");
  fout=fopen("maxflow.out","w");

  fscanf(fin,"%d%d",&n,&m);

  for(i=0;i<m;i++){
    fscanf(fin,"%d%d%d",&a,&b,&val);
    much[a][b]=val;
    graf[a].push_back(b);
    graf[b].push_back(a);
  }

  aux=0;
  s=0;
  while(aux!=-1){
    s+=aux;
    aux=DFS(1,INFI);
    seen[1]=0;
  }

  fprintf(fout,"%d\n",s);

  fclose(fin);
  fclose(fout);
  return 0;
}