Cod sursa(job #2660163)

Utilizator KPP17Popescu Paul KPP17 Data 18 octombrie 2020 13:53:52
Problema Flux maxim Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb
#define fisier "maxflow"
#include <fstream>
std::ifstream in(fisier ".in");
std::ofstream out(fisier ".out");
const int N = 1001;
int C[N][N], F[N][N], T[N];
inline int S(int i, int j)
{return C[i][j] - F[i][j];};
#include <deque>
bool bfs(const int n)
{
    bool E[N] = {false, true};
    for (std::deque<int> deq = {1}; deq.size(); deq.pop_front())
        for (int back = 1; back <= n; back++)
            if (!E[back] && S(deq.front(), back))
            {
                E[back] = true;
                deq.push_back(back);
                T[back] = deq.front();
                if (back == n)
                    return true;
            }
    return false;
}

int main()

{
    int n, m, f = 0;
    in >> n >> m;
    while (m--)
    {
        int a, b, c;
        in >> a >> b >> c;
        C[a][b] = c;
    }
    while (bfs(n))
    {
        m = S(T[n], n);
        for (int i = n; T[i]; i = T[i])
            m = std::min(m, S(T[i], i));
        f += m;
        for (int i = n; T[i]; i = T[i])
        {
            F[ T[i] ][i] += m;
            F[i][ T[i] ] -= m;
        }
    }
    out << f;
}