Pagini recente » Cod sursa (job #1786531) | Cod sursa (job #649627) | Cod sursa (job #2356101) | Cod sursa (job #134165) | Cod sursa (job #1576262)
#include <bits/stdc++.h>
#define NMAX 30001
#define MMAX 100025
using namespace std;
FILE *fin = fopen("sate.in", "r");
FILE *fout = fopen("sate.out", "w");
int n, m, in, sf;
int lst[NMAX], vf[2*MMAX], urm[2*MMAX], cost[2*MMAX];
int nr, Q[NMAX], dist[NMAX];
bool viz[NMAX];
void adaug(int x, int y, int c)
{
nr++;
vf[nr] = y;
urm[nr] = lst[x];
lst[x] = nr;
cost[nr] = c;
}
void BFS()
{
int prim = 0, ultim = 1;
Q[++prim] = in;
viz[in] = 1;
int x, y, poz;
while(prim <= ultim)
{
x = Q[prim];
poz = lst[x];
{
while(poz != 0)
{
y = vf[poz];
if(!viz[y])
{
Q[++ultim] = y;
viz[y] = 1;
if(x < y)
dist[y] = dist[x] + cost[poz];
if(x > y)
dist[y] = dist[x] - cost[poz];
}
poz = urm[poz];
}
prim++;
}
}
fprintf(fout, "%d\n", dist[sf]);
}
int main()
{
fscanf(fin, "%d%d%d%d", &n, &m, &in, &sf);
int x, y, c;
for(int i = 0; i < n; i++)
{
fscanf(fin, "%d%d%d", &x, &y, &c);
adaug(x, y, c);
adaug(y, x, c);
}
BFS();
return 0;
}