Pagini recente » Cod sursa (job #478592) | Borderou de evaluare (job #2783504) | Cod sursa (job #3159193) | Cod sursa (job #2762365) | Cod sursa (job #568387)
Cod sursa(job #568387)
#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])
}
}