Cod sursa(job #3146064)

Utilizator Luca529Taschina Luca Luca529 Data 18 august 2023 14:25:42
Problema Flux maxim Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.17 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>

using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
vector<pair<int, int> > x[1001];
int n, maxf, p[1001];

void BFS()
{queue<int> q;
 int a;

 q.push(1);
 while(q.empty()!=1)
 {a=q.front();
  vector<pair<int, int> >:: iterator I;

  for(I=x[a].begin();I<x[a].end();I++)
  if(p[I->first]==0 && I->second!=0)
  {p[I->first]=p[a]+1;
   q.push(I->first);
  }
  q.pop();
 }
}

int DFS(int nod, int mini)
{//cout<<nod<<" ";
 if(nod==n)
 {maxf+=mini;
  return mini;
 }
 vector<pair<int, int> >:: iterator I;
 for(I=x[nod].begin();I<x[nod].end();I++)
 if(p[I->first]>p[nod] && I->second!=0)
 {int a=DFS(I->first, min(mini, I->second));
  if(a!=-1)
  {I->second-=a;
   if(nod!=1)return a;
  }
 }
 return -1;
}

int main()
{   int m, a, b, c, t=0;
    fin>>n>>m;
    for(int i=1;i<=m;i++)
    {fin>>a>>b>>c;
     x[a].push_back({b, c});
    }

    c=0;
    while(t==0)
    {t=1;
     for(int i=1;i<=n;i++)
     p[i]=0;
     BFS();

     DFS(1, 2e9);//cout<<endl;
     if(c!=maxf)t=0;
     c=maxf;
    }
    fout<<maxf;
    return 0;
}