Cod sursa(job #626158)

Utilizator valentin.harsanValentin Harsan valentin.harsan Data 26 octombrie 2011 15:21:40
Problema Flux maxim Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include<fstream>
#include<queue>
#include<vector>
#define N 1001
using namespace std;

ifstream in("maxflow.in");
ofstream out("maxflow.out");

int n,m,x[N][N],maxflow,p[N],drum[N],nr;
bool vizitat[N];
vector<int> g[N];

inline void reviz() {

    for(int i=1;<=n;++i)
        vizitat[i]=;
}

void add_drum() {
    int i,smin=1<<22;

    for(i=1;i!=nr;++i) {

        if(x[drum[i]][drum[i+1]]<smin)
            smin=x[drum[i]][drum[i+1]];

    }

    maxflow+=smin;

}

void df(int nod) {
    int i;

    for(i=0;i!=g[nod].size();++i) if(!vizitat[nod]) {

        if(g[nod][i]==n)
            add_drum();

        vizitat[nod]=true;

        drum[++nr]=g[nod][i];

        df(g[nod][i]);

        --nr;
        vizitat[nod]=false;

    }

}

int main() {
    int i,j,a,b,c;

    in >> n >> m;

    for(i=1;i<=m;++i) {

        in >> a >> b >> c;

        x[a][b]+=c;

        g[a].push_back(b);
        g[b].push_back(a);

    }

    while(df())
        reviz();

    out << maxflow;

    return 0;
}