Cod sursa(job #2129910)

Utilizator Liviu_Ionut_MoantaMoanta Ionut Liviu Liviu_Ionut_Moanta Data 13 februarie 2018 11:27:53
Problema Flux maxim Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include<fstream>
#include<vector>
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
int n,m,i,j,o,minim,sol,q,x,y,k;
int D[1005],t[1005];
int c[1005][1005],f[1005][1005];
vector<int>L[1005];
void dfs(int nod){
    D[nod]=1;
    for(int i=0;i<L[nod].size();i++){
        int fiu=L[nod][i];
        if(D[fiu]==0 && c[nod][fiu]>f[nod][fiu]){
            t[fiu]=nod;
            dfs(fiu);
        }
    }
}
int main(){
    fin>>n>>m;
    for(i=1;i<=m;i++){
        fin>>x>>y>>k;
        L[x].push_back(y);
        L[y].push_back(x);
        c[x][y]=k;
    }
    D[n]=1;
    while(D[n]==1){
        for(o=1;o<=n;o++){
            D[o]=0;
            t[o]=0;
        }
        dfs(1);
        if(D[n]==1){
            q=n;
            minim=200005;
            while(q!=1){
                minim=min(minim,c[t[q]][q]-f[t[q]][q]);
                q=t[q];
            }
            sol+=minim;
            q=n;
            while(q!=1){
                f[t[q]][q]+=minim;
                f[q][t[q]]-=minim;
                q=t[q];
            }
        }
    }
    fout<<sol;
    return 0;
}