Cod sursa(job #3040616)

Utilizator CobzaruAntonioCobzaru Paul-Antonio CobzaruAntonio Data 30 martie 2023 10:34:19
Problema Flux maxim Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.19 kb
#include <fstream>
#include <map>
#include <climits>
#include <vector>
using namespace std;
ifstream cin ("maxflow.in");
ofstream cout ("maxflow.out");
map < pair<int,int>, int> r;
vector <int> g[1005];
bool viz[1005];
int n,m;
int dfs (int nod,int minim)
{
    viz[nod] = true;
    if (nod==n)
        return minim;
    for (auto vf:g[nod])
    {
        if (viz[vf])
            continue;
        if (!r[{nod,vf}])
            continue;
        int x = dfs(vf,min(minim,r[{nod,vf}]));
        if (x > 0)
        {
            r[{nod,vf}] = r[{nod,vf}] - x;
            r[{vf,nod}] = r[{vf,nod}] + x;
            return x;
        }
    }
    return 0;
}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    cin >> n >> m;
    int i,j,k;
    for (i=1;i<=m;i++)
    {
        int x,y,z;
        cin >> x >> y >> z;
        g[x].push_back(y);
        r[{x,y}] = z;
        if (r[{y,x}]==0)
            g[y].push_back(x);
    }
    int x = 1;
    int rasp = 0;
    while (x)
    {
        for(i=1;i<=n;i++)
            viz[i] = false;
        x = dfs(1,INT_MAX);
        rasp = rasp + x;
    }
    cout << rasp;
    return 0;
}