Cod sursa(job #3292789)

Utilizator TraianQTraianQ TraianQ Data 9 aprilie 2025 12:51:19
Problema Flux maxim Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.45 kb
#include <fstream>
#include <vector>
#include <deque>
using namespace std;
vector <int> V[1005];
vector <int> tata;
int cap[1005][1005];
deque <pair<int,int>> D;
int flow_bfs(int s,int t)
{
    tata.clear();
    tata.resize(1001,-1);
    tata[s]=-2;
    D.clear();
    D.push_back({s,1000000000});
    while(!D.empty())
    {
        int nod=D.front().first;
        int flow=D.front().second;
        D.pop_front();
        for(auto x:V[nod])
        {
            if(tata[x]==-1 && cap[nod][x])
            {
                tata[x]=nod;
                int new_flow=min(flow,cap[nod][x]);
                if(x==t)
                    return new_flow;
                D.push_back({x,new_flow});
            }
        }
    }
    return 0;
}
int maxflow(int s,int t)
{
    int flow=0;
    int new_flow;
    while(new_flow=flow_bfs(s,t))
    {
        flow+=new_flow;
        int current_nod=t;
        while(current_nod!=s)
        {
            int prev=tata[current_nod];
            cap[prev][current_nod]-=new_flow;
            cap[current_nod][prev]+=new_flow;
            current_nod=prev;
        }
    }
    return flow;
}
int main()
{
    ifstream fin("maxflow.in");
    ofstream fout("maxflow.out");
    int n,m,a,b,c;
    fin>>n>>m;
    for(int i=1;i<=m;i++)
    {
        fin>>a>>b>>c;
        cap[a][b]=c;
        V[a].push_back(b);
        V[b].push_back(a);
    }
    fout<<maxflow(1,n);
    return 0;
}