Cod sursa(job #2415429)

Utilizator triscacezarTrisca Vicol Cezar triscacezar Data 25 aprilie 2019 23:30:52
Problema Flux maxim Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <bits/stdc++.h>

using namespace std;

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

int n,m,x,y,z,tata[1010],cap[1010][1010];
vector<int> v[1010];

bool Djikstra(){
    queue<int> q;
    memset(tata,0,sizeof(tata));
    q.push(1);
    while(q.size()){
        int poz=q.front();
        if(poz==n)break;
        q.pop();
        for(auto it:v[poz])
            if((!tata[it])&&cap[poz][it]){
                tata[it]=poz;
                q.push(it);
            }
    }
    return (tata[n]!=0);
}

int main()
{
    f>>n>>m;
    for(;m;m--){
        f>>x>>y>>z;
        v[x].push_back(y);
        v[y].push_back(x);
        cap[x][y]=z;
    }
    int Flx=0;
    for(;Djikstra();){
        int flxmax=1e9;
        for(int poz=n;poz!=1;poz=tata[poz])
            flxmax=min(flxmax,cap[tata[poz]][poz]);
        for(int poz=n;poz!=1;poz=tata[poz]){
            cap[tata[poz]][poz]-=flxmax;
            cap[poz][tata[poz]]+=flxmax;
        }
        Flx+=flxmax;
    }g<<Flx;
    return 0;
}