Cod sursa(job #2738708)

Utilizator alexdumitrescuDumitrescu George Alex alexdumitrescu Data 6 aprilie 2021 11:36:01
Problema Flux maxim Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.2 kb
#include <bits/stdc++.h>
#define Nmax 1005
using namespace std;
ifstream fin ("maxflow.in");
ofstream fout ("maxflow.out");

vector <int> v[Nmax];
int n, m, t[Nmax], c[Nmax][Nmax], flux;
bool flow()
{
    memset(t, 0, sizeof(t));
    queue <int> q;
    t[1]=-1;
    q.push(1);

    while(!q.empty())
    {
        int u=q.front();
        q.pop();

        for(auto it:v[u])
            if(!t[it] && c[u][it])
            {
                t[it]=u;
                q.push(it);
            }
    }

    if(!t[n])
        return 0;

    for(auto it:v[n])
        if(t[it] && c[it][n])
        {
            t[n]=it;
            int fm=INT_MAX;

            for(int i=n;i!=1;i=t[i])
                fm=min(fm, c[t[i]][i]);

            for(int i=n;i!=1;i=t[i])
                {
                    c[t[i]][i]-=fm;
                    c[i][t[i]]+=fm;
                }

            flux+=fm;
        }
    return 1;
}
int main()
{
    fin >> n >> m;
    for(int i=1;i<=m;i++)
    {
        int x, y;
        fin >> x >> y;
        fin >> c[x][y];
        v[x].push_back(y);
        v[y].push_back(x);
    }
    while( flow() );

    fout << flux;
    return 0;
}