Cod sursa(job #990106)

Utilizator classiusCobuz Andrei classius Data 27 august 2013 14:38:53
Problema Flux maxim Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include <fstream>
#include <vector>
#include <queue>
#define uv v[i][j]
using namespace std;

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

int n,m;
int a[1001][1001];
vector<int> v[1001];

bool bfs(int parent[]){

    bool ok[1001]={};
    queue<int> q;
    ok[1]=1;
    q.push(1);

    while(!q.empty()){
        int i=q.front();
        q.pop();
        for(unsigned j=0;j<v[i].size();j++)
            if(!ok[uv]&&a[i][uv]>0){
                ok[uv]=1;
                parent[uv]=i;
                q.push(uv);
            }
    }

    return ok[n];
}

int main()
{
    f>>n>>m;

    for(int i=1;i<=m;i++){
        int x,y,cs;
        f>>x>>y>>cs;
        v[x].push_back(y);
        v[y].push_back(x);
        a[x][y]=cs;
    }

    int parent[1001]={};
    int s=0;

    while(bfs(parent)){

        int i=n,j,flo=1<<30;
        while(i!=1){
            j=i;
            i=parent[i];
            flo=min(flo,a[i][j]);
        }
        i=n;
        while(i!=1){
            j=i;
            i=parent[i];
            a[i][j]-=flo;
            a[j][i]+=flo;
        }
        s+=flo;
    }

    g<<s;

    return 0;
}