Pagini recente » Cod sursa (job #2821772) | Cod sursa (job #377447) | Cod sursa (job #1501971) | Cod sursa (job #2421789) | Cod sursa (job #1565807)
#include<stdio.h>
using namespace std;
const int N = 30005, M = 2 * 100030;
int lst[N], vf[M], urm[M], m, viz[N], ic, sf, cost[M];
struct coada
{
int dif, nod;
};
coada c[N];
void adauga (int x, int y, int cost2)
{
vf[++m] = y;
cost[m] = cost2;
urm[m] = lst[x];
lst[x] = m;
}
int bfs (int dest)
{
int y, p;
viz[c[ic].nod] = true;
p = lst[c[ic].nod];
while (p != 0)
{
y = vf[p];
if (viz[y] == false)
{
if (y < c[ic].nod)
c[sf].dif = c[ic].dif - cost[p];
else
c[sf].dif = c[ic].dif + cost[p];
c[sf++].nod = y;
viz[y] = true;
if (y == dest)
return c[sf - 1].dif;
}
p = urm[p];
}
return -1;
}
int main ()
{
FILE *in, *out;
in = fopen ("sate.in", "r");
out = fopen ("sate.out", "w");
int n, m, start, dest;
fscanf (in, "%d%d%d%d", &n, &m, &start, &dest);
int i, x, y, cost2;
for (i = 1; i <= m; i++)
{
fscanf (in, "%d%d%d", &x, &y, &cost2);
adauga (x, y, cost2);
adauga (y, x, cost2);
}
c[sf].nod = start;
c[sf++].dif = 0;
while (ic != sf)
{
x = bfs(dest);
if (x != -1)
{
if (x > 0)
fprintf (out, "%d", x);
else
fprintf (out, "%d", -x);
return 0;
}
ic++;
}
return 0;
}