Cod sursa(job #613197)

Utilizator the@EyE@Postavaru Stefan the@EyE@ Data 17 septembrie 2011 23:36:03
Problema Flux maxim Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include<fstream>
#include<vector>
#define min(a,b) a<b? a:b

using namespace std;

struct nod
{
    int cap,cont;
};

vector<int> retea[5000];
int leg[5000][5000];
nod nods[5000];
int n,m,max;

int flow(int ind)
{
    if(ind==n) return 0;
    for(int i=0;i<retea[ind].size();i++)
    {
        int vol=min(nods[retea[ind][i]].cap,leg[ind][retea[ind][i]]);
        if(vol>nods[ind].cont)vol=nods[ind].cont;
        nods[retea[ind][i]].cont=vol;
        nods[ind].cont-=vol;
        nods[ind].cont+=flow(retea[ind][i]);
        if(nods[ind].cont==0)break;
    }
    return nods[ind].cont;
}

int main()
{
    ifstream in("maxflow.in");
    ofstream out("maxflow.out");

    in >> n >>m;
    for(int i=0;i<m;i++)
    {
        int s,d,c;
        in >> s >> d>> c;
        leg[s][d]=c;
        nods[s].cap+=c;
        retea[s].push_back(d);
    }

    nods[1].cont=nods[1].cap;
    nods[n].cap=nods[1].cap;
    flow(1);

    out<< nods[1].cap-nods[1].cont <<'\n';
}