Pagini recente » Cod sursa (job #2463529) | Cod sursa (job #584973) | Cod sursa (job #10966) | Cod sursa (job #1016212) | Cod sursa (job #2564724)
#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;
}