Cod sursa(job #2682461)

Utilizator cyg_ieeuVasile Radu-Andrei cyg_ieeu Data 8 decembrie 2020 18:17:04
Problema Flux maxim Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.33 kb
#include <iostream>
#include <fstream>
#include <queue>
#include <cstring>
std::ifstream in("maxflow.in");
std::ofstream out("maxflow.out");
int n,m,s,d,flux;
const int NMAX = 1005;
const int INF = 1000000007;
int c[NMAX][NMAX],f[NMAX][NMAX],t[NMAX];
int bfs(int source,int dest)
{
    int nod,i;
    std::queue<int>q;
    memset(t,0,sizeof(t));
    q.push(source);
    t[source] = -1;
    while(!q.empty())
    {
        nod = q.front();
        q.pop();
        for(i = 1;i <= n;i++)
        {
            if(!t[i] && c[nod][i] - f[nod][i] > 0)
            {
                q.push(i);
                t[i] = nod;
                if(i == dest)
                    return 1;
            }
        }
    }
    return 0;
}
void flux_max()
{
    int i,cr;
    for(flux = 0;bfs(s,d);flux += cr)
    {
        cr = INF;
        i = d;
        while(i != s)
        {
            cr = std::min(cr,c[t[i]][i]-f[t[i]][i]);
            i = t[i];
        }
        i = d;
        while(i != s)
        {
            f[t[i]][i] += cr;
            f[i][t[i]] -= cr;
            i = t[i];
        }
    }
}
int main()
{
    int x,y,z;
    in>>n>>m;
    s = 1;
    d = n;
    for(int i = 1;i <= m;i++)
    {
        in>>x>>y>>z;
        c[x][y] = z;
    }
    flux_max();
    out<<flux;
    return 0;
}