Cod sursa(job #3146119)

Utilizator Luca529Taschina Luca Luca529 Data 18 august 2023 16:53:45
Problema Flux maxim Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>

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

bool BFS()
{for(int i=1;i<=n;i++)
 p[i]=0;
 queue<int> q;
 int a;

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

  for(I=x[a].begin();I<x[a].end();I++)
  if(p[*I]==0 && cost[a][*I]>0)
  {p[*I]=p[a]+1;
   q.push(*I);
  }
  q.pop();
 }
 return p[n]!=0;
}

int DFS(int nod, int mini)
{if(nod==n || mini==0)
 return mini;

 vector<int>:: iterator I;
 for(I=x[nod].begin();I<x[nod].end();I++)
 if(p[*I]==1+p[nod] && cost[nod][*I]>0)
 {long long int a=DFS(*I, min(mini, cost[nod][*I]));
  if(a!=0)
  {cost[nod][*I]-=a;
   cost[*I][nod]+=a;
   return a;
  }
 }
 return 0;
}

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

    while(BFS())
    while(int v=DFS(1, 1e9))
    maxf+=v;

    fout<<maxf;
    return 0;
}