Cod sursa(job #2564724)

Utilizator ionut.birisBiris Ionut ionut.biris Data 2 martie 2020 09:46:15
Problema Flux maxim de cost minim Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.52 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <cstring>
using namespace std;

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

const int NMax = 355;
const int oo = (1 << 30);

vector < int > G[NMax];
queue < int > Q;

int N,M,S,D;
int Cost[NMax][NMax];
int C[NMax][NMax];
int F[NMax][NMax];
int Total;
int d[NMax];

int CostDrum[NMax];
bool InCoada[NMax];

void Read(){
    f >> N >> M >> S >> D;

    for(int i = 1 ; i <= M;i++){
        int x,y,c,z;
        f >> x >> y >> c >> z;
        G[x].push_back(y);
        G[y].push_back(x);
        C[x][y] = c;
        Cost[x][y] = z;
        Cost[y][x] = -z;
    }
}

void BellmanFord(int nodStart){
    fill(CostDrum + 1, CostDrum + N + 1, oo);
    CostDrum[S] = 0;

    Q.push(nodStart);
    InCoada[nodStart] = true;

    while(!Q.empty()){
        int nodCurent = Q.front();
        Q.pop();
        InCoada[nodCurent] = false;

        for(unsigned int i = 0 ; i < G[nodCurent].size();i++){
            int Vecin = G[nodCurent][i];
            if(F[nodCurent][Vecin] < C[nodCurent][Vecin] &&
            CostDrum[Vecin] > CostDrum[nodCurent] + Cost[nodCurent][Vecin]){

                CostDrum[Vecin] = CostDrum[nodCurent] + Cost[nodCurent][Vecin];
                if(!InCoada[Vecin]){
                    InCoada[Vecin] = true;
                    Q.push(Vecin);
                }
            }
        }

    }

    Total = CostDrum[D];
}

void


int main()
{
    Read();

    return 0;
}