Cod sursa(job #568387)

Utilizator Addy.Adrian Draghici Addy. Data 31 martie 2011 09:59:46
Problema Flux maxim de cost minim Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.25 kb
#include <cstdio>
#include <vector>

using namespace std;

#define NMAX 365
#define INF 0x3f3f3f3f

int
vector < pair <int, int> > G[NMAX];

void citire (), flux_cmin ();

int main () {
	
	citire ();
	
	flux_cmin ();

	return 0;
}

void citire () {
	
	freopen ("fmcm.in", "r", stdin);
	
	int x, y, c, z;
	
	scanf ("%d %d %d %d", &n, &m, &s, &d);
	
	for (i = 1; i <= m; i++) {
		scanf ("%d %d %d %d", &x, &y, &c, &z);
		G[x].push_back (make_pair (y, z)), G[y].push_back (make_pair (x, z));
		C[x][y] = c;
	}
}

bool bellman_ford () {
	
	int nod, fiu, cst;
	vector < pair <int, int> >::iterator it;
	
	memset (V, INF, sizeof (V)); memset (viz, 0, sizeof (viz));
	
	Q.push (S), V[S] = 0, viz[S] = 1;
	while (!Q.empty ()) {
		nod = Q.front ();
		for (it = G[nod].begin (); it != G[nod].end (); it++) {
			fiu = it -> first, cst = it -> second;
			
			if (C[nod][fiu] > F[nod][fiu] && V[nod] + cst < V[fiu]) {
				V[fiu] = V[nod] + cst;
				
				T[fiu] = nod;
				
				if (!viz[fiu]) Q.push (fiu), viz[fiu] = 1;
			}
		}
		
		Q.pop (), viz[nod] = 0;
	}
	
	if (V[D] != INF) return 1;
	return 0;
}

void flux_cmin () {
	
	while (bellman_ford ()) {
		
		minim = INF;
		
		for (nod = T[D]; T[nod]; nod = T[nod])
	}
}