Cod sursa(job #2960837)

Utilizator Anastasia7Anastasia Anastasia7 Data 5 ianuarie 2023 00:13:49
Problema Flux maxim Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.93 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>


using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
vector<vector<int> > capacity,adj_list;
vector<int>parent;
int n,m,t,s;


bool BFS()
{
    vector<bool> viz(n+1);
    queue<int> q;
    /*for(int i=0; i<=n+1; i++)
        viz.push_back(false);*/
    q.push(s);
    viz[s] = true;
    parent[s] = -1;
    while(!q.empty())
    {
        int u = q.front();
        q.pop();
        for(auto v: adj_list[u])
        {
            if(viz[v]==false && capacity[u][v]!=0)
            {
                parent[v] = u;
                if(v == t)
                    return true;
                viz[v] = true;
                q.push(v);
            }
        }
    }
    return false;
}

int EdmondsKarp()
{
    long maxFlow=0;
    while(BFS()==true)
    {
        int u,v=t;
        int pathFlow=INT_MAX;
        while(v!=s)
        {
            u=parent[v];
            if(capacity[u][v]<pathFlow)
                pathFlow=capacity[u][v];
            v=parent[v];
        }
        v=t;
        while(v!=s)
        {
            u=parent[v];
            capacity[u][v]-=pathFlow;
            capacity[v][u]+=pathFlow;
            v=parent[v];
        }
        maxFlow+=pathFlow;
    }
    return maxFlow;
}

void citire()
{
    int u,v,cap;
    fin>>n>>m;
    t=n;
    s=1;
   /* for(int i=0;i<=n;i++)
    {
        vector<int>linie(n+1);
        adj_list.push_back(linie);
        capacity.push_back(linie);
        parent.push_back(0);
    }*/
    adj_list.resize(n+1);
    parent.resize(n+1);
    capacity.resize(n+1, vector<int>(n+1));
    for(int i=1; i<=m; i++)
    {
        fin>>u>>v>>cap;
        adj_list[u].push_back(v);
        adj_list[v].push_back(u);
        capacity[u][v]=cap;
    }
    fout << EdmondsKarp();
}
int main()
{
    citire();
    return 0;
}