Cod sursa(job #2669634)

Utilizator KPP17Popescu Paul KPP17 Data 7 noiembrie 2020 13:38:58
Problema Flux maxim Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.3 kb
#include <fstream>
#define fisier "maxflow"
std::ifstream in(fisier ".in");
std::ofstream out(fisier ".out");
const int N = 1001;
int C[N][N], T[N], n;
#include <vector>
std::vector<int> L[N];
#include <bitset>
std::bitset<N> E;
#include <deque>
bool bfs()
{
    E = 2;
    for (std::deque<int> Q = {1}; Q.size(); Q.pop_front())
        for (int back: L[Q.front()])
            if (not E[back] and C[Q.front()][back])
            {
                E[back] = true;
                Q.push_back(back);
                T[back] = Q.front();
                if (back == n)
                    return true;
            }
    return false;
}
int main()
{
    int m, f = 0;
    in >> n >> m;
    while (m--)
    {
        int a, b, c;
        in >> a >> b >> c;
        C[a][b] = c;
        L[a].push_back(b);
        L[b].push_back(a);
    }
    while (bfs())
        for (int t: L[n])
            if (E[t])
            {
                int min = C[T[n] = t][n];
                for (int i = t; T[i]; i = T[i])
                    min = std::min(min, C[ T[i] ][i]);
                f += min;
                for (int i = n; T[i]; i = T[i])
                {
                    C[ T[i] ][i] -= min;
                    C[i][ T[i] ] += min;
                }
            }
    out << f;
}