Cod sursa(job #2923360)

Utilizator gabriel10tm@gmail.comGabriel Marian [email protected] Data 12 septembrie 2022 22:25:19
Problema Flux maxim Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.35 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
#define cout fout
#define cin fin
#define ll long long
const int nmx = 280;
int n;
int start, sink;
ll max_flow = 0;
int c[nmx][nmx];
int vis[nmx];
int t[nmx];
int Bfs(int k)
{
    memset(t, 0, sizeof(t));
    memset(vis, 0, sizeof(vis));
    queue<int> q;
    q.push(k);
    vis[k] = 1;
    while (!q.empty())
    {
        int front = q.front();
        if (front == sink)
            return true;
        q.pop();
        for (int to = 1; to <= n; to++)
        {
            if (c[front][to] > 0 && vis[to] != 1)
            {
                t[to] = front;
                vis[to] = 1;
                q.push(to);
            }
        }
    }
    return false;
}
ll MaxFlow()
{
    while (Bfs(start))
    {
        ll mn = LLONG_MAX;
        for (int k = sink; k != start; k = t[k])
            mn = min(mn, (ll)c[t[k]][k]);

        for (int k = sink; k != start; k = t[k])
        {
            c[k][t[k]] += mn;
            c[t[k]][k] -= mn;
        }
        max_flow += mn;
    }
    return max_flow;
}
int main()
{
    int m;
    cin >> n >> m;
    int x, y, cap;
    while(m--)
    {
        cin >> x >> y >> cap;
        c[x][y] = cap;
    }
    start = 1;
    sink = n;
    cout << MaxFlow();
}