Cod sursa(job #2537588)

Utilizator Stefan3002Stefan Stefan3002 Data 3 februarie 2020 19:44:30
Problema Flux maxim Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.06 kb
#include <iostream>
#include <fstream>
#include <queue>
using namespace std;
ifstream intrare("maxflow.in");
ofstream iesire("maxflow.out");

const int NMAX=1005;
int graf[NMAX][NMAX];
int q[NMAX];
int n,m,i,j;



int parent[NMAX];
bool vizitat[NMAX];
int k=1;




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

vizitat[1]=1;
parent[1]=-1;

while(!q.empty()){

    int nod=q.front();
    q.pop();

    for(int i=1;i<=n;i++)
    if(graf[nod][i]>0 && !vizitat[i]){
        vizitat[i]=1;
        q.push(i);
        parent[i]=nod;
    }


}



return vizitat[n];
}







int main()
{
intrare>>n>>m;
for(i=1;i<=m;i++){
    int x,y,z;
    intrare>>x>>y>>z;
    graf[x][y]=z;
}
int sol=0;
while(BFS()){

    int minim=(1<<28);
    for(int i=n;i!=1;i=parent[i])
        minim=min(minim,graf[parent[i]][i]);
    sol+=minim;
    for(int i=n;i!=1;i=parent[i]){
        graf[parent[i]][i]-=minim;
        graf[i][parent[i]]+=minim;
    }

}


iesire<<sol;


    return 0;
}