Cod sursa(job #2378894)

Utilizator Lazar_LaurentiuLazar Laurentiu Lazar_Laurentiu Data 12 martie 2019 18:31:13
Problema Flux maxim Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#define VMAX 1000000000
#define MAX 1010
#define x first
#define y second

using namespace std;

int n,m,a,b,c,ans,ac,ansa;
int p[MAX],fl[MAX][MAX];
bool acc[MAX];
vector<int> nd[MAX];
queue<int> q;

int main()
{
    ifstream f ("maxflow.in");
    ofstream g ("maxflow.out");
    f>>n>>m;
    for(int i=1;i<=m;i++)
      f>>a>>b>>c,
      nd[a].push_back(b),
      fl[a][b]=c;
    while(1){
      for(int i=1;i<=n;i++)acc[i]=p[i]=0;
      q.push(1);
      while(!q.empty()){
        ac=q.front(),q.pop();
        for(auto i:nd[ac])
          if(!acc[i]&&fl[ac][i]){
            acc[i]=1;
            p[i]=ac;
            q.push(i);
          }
      }
      if(acc[n]){
        ansa=VMAX;
        for(int i=n;i!=1;i=p[i])
          ansa=min(ansa,fl[p[i]][i]);
        ans+=ansa;
        for(int i=n;i!=1;i=p[i]) fl[p[i]][i]-=ansa;
      } else break;
    }
    g<<ans;
    f.close ();
    g.close ();
    return 0;
}