Pagini recente » Cod sursa (job #1558462) | Cod sursa (job #72803) | Cod sursa (job #648859) | Cod sursa (job #1163127) | Cod sursa (job #325120)
Cod sursa(job #325120)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define in "sate.in"
#define out "sate.out"
#define NMAX 30005
#define ALB 0
#define GRI 1
#define NEGRU 2
#define mod(x) ( (x) < 0 ? (-x) : (x) )
typedef struct nod {
int vf,cost;
struct nod *next;
} *PNOD, NOD;
PNOD L[NMAX];
int N, M, X, Y;
int sel[NMAX], q[NMAX], p, u, d[NMAX];
void Add ( int i, int j, int cost )
{
PNOD p = (PNOD) calloc ( 1, sizeof ( NOD ) );
p->vf = j;
p->cost = cost;
p->next = L[i];
L[i] = p;
}
void BFS()
{
q[p = u = 1] = X;
sel[ 1 ] = GRI;
d [ X ] = 0;
int i; PNOD j;
while ( p <= u )
{
i = q[ p ];
for ( j = L[ i ]; j; j = j->next )
if ( sel[ j->vf ] == ALB )
{
if ( j->vf > i ) d[ j->vf ] = d [ i ] + j->cost;
else d[j->vf] = d [ i ] - j->cost;
sel [ j->vf ] = GRI;
q[ ++u ] = j->vf;
}
p++;
sel[i] = NEGRU;
}
}
int main ( void )
{
freopen ( in, "r", stdin );
freopen ( out, "w", stdout );
scanf ( "%d%d%d%d", &N, &M, &X, &Y );
int i, j, di;
for ( ; M > 0; --M )
{
scanf ( "%d%d%d", &i, &j, &di );
Add ( i, j, di ); Add ( j, i, di );
}
BFS();
printf ( "%d\n", d[Y] );
return 0;
}