Pagini recente » Cod sursa (job #1797857) | Cod sursa (job #3176185) | Cod sursa (job #110368) | Cod sursa (job #2461507) | Cod sursa (job #2208920)
#include <cstdio>
#include <queue>
#define NMAX 100000
using namespace std;
int n, m, nr, lst[1 + NMAX], urm[1 + 2 * NMAX], viz[1 + 2 * NMAX], s, f, dist;
struct M {
int p, d;
};
M vf[1 + 2 * NMAX];
queue <M> a;
void adauga ( int x, int y, int d ) {
++nr;
vf[nr].p = y;
vf[nr].d = d;
urm[nr] = lst[x];
lst[x] = nr;
}
void bfs ( ) {
while ( a.front().p != f ) {
M x = a.front();
a.pop();
int p = lst[x.p];
M y;
while ( p ) {
y = vf[p];
if ( !viz[y.p] ) {
a.push ( y );
if ( y.p < x.p && dist - y.d > 0 )
dist -= y.d;
else if ( y.p > x.p )
dist += y.d;
viz[y.p] = 1;
}
p = urm[p];
}
}
}
int main() {
FILE *fin = fopen ( "sate.in", "r" );
fscanf ( fin, "%d%d%d%d", &n, &m, &s, &f );
int i, x, y, d;
for ( i = 1; i <= m; ++i ) {
fscanf ( fin, "%d%d%d", &x, &y, &d );
adauga ( y, x, d );
adauga ( x, y, d );
}
fclose ( fin );
a.push((M) {s, 0});
bfs();
FILE *fout = fopen ( "sate.out", "w" );
fprintf ( fout, "%d", dist );
fclose ( fout );
return 0;
}