Cod sursa(job #1829297)

Utilizator Emil64Emil Centiu Emil64 Data 14 decembrie 2016 19:15:32
Problema Flux maxim Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

vector<int>g[1001];

int i, j, n, m, l, k, e[1001][1001], b[1001], c[5000], x, y, z, flow = 0;

int main()
{
    ifstream f("maxflow.in");
    ofstream _g("maxflow.out");
    f >> n >> m;

    //for(i=0; i<=n; i++) g[i].push_back(0);

    for(i=1; i<=m; i++){
        f >> x >> y >> z;
        g[x].push_back(y);
        g[y].push_back(x);
        e[x][y] += z;
    }

    x = 5;
    y = 7;
    while(true)
    {
        for(j=1; j<=n; j++)
            b[j]=0;

        c[0] = 1;
        c[1] = 1;

        for(j=1; j<=c[0] && !b[n]; j++)
            for(k=c[j],i=0; i<g[k].size(); i++)
                if(!b[g[k][i]] && e[k][g[k][i]]){
                    c[0]++;
                    b[g[k][i]]=k;
                    c[c[0]] = g[k][i];

                }

        if(!b[n])
            break;

        for(i=0; i<g[n].size(); i++)
            if(b[g[n][i]] && e[g[n][i]][n])
            {
                for(l=1000001,j=k=g[n][i],b[n]=k; j>1; j=b[j])
                    l=(l>e[b[j]][j])? e[b[j]][j]:l;
                l= (l>e[k][n])? e[k][n]:l;
                for(flow+=l,j=n; j>1; j=b[j])
                    e[b[j]][j]-=l,e[j][b[j]]+=l;
            }
    }
    _g << flow << "\n";
}