Pagini recente » Cod sursa (job #850474) | Cod sursa (job #696202) | Cod sursa (job #2930616) | Cod sursa (job #323698) | Cod sursa (job #398272)
Cod sursa(job #398272)
#include <stdio.h>
#include <vector>
#define Nmax 30010
#define Mmax 100040
using namespace std;
vector <int> A[Nmax], B[Nmax];
int x, y, i, j, p, u, a, b, c, sol, n, m, sgn, ok;
int D[Nmax], coada[Nmax], viz[Nmax];
void BFS (int nod){
p = 1;
u = 2;
coada[ p ] = nod;
viz[nod] = 1;
while (p <= u){
if (ok == 100)
break;
for (i = 0 ; i < (int)A[ coada[p] ].size() ; i++)
if (viz[A[coada[p]][i]] == 0){
viz[A[coada[p]][i]] = 1;
sgn = 1;
coada[ u ] = A[ coada[p] ][ i ];
if (coada[ p ] > A[ coada[ p ] ][ i ])
sgn = -1;
D[ u ] = D[ p ] + B[ coada[ p ] ][ i ]*sgn;
if (A[ coada[p] ][ i ] == y){
sol = D[u];
ok = 100;
break;
}
u++;
}
p++;
}
}
int main (){
FILE * f = fopen ("sate.in", "r");
FILE * g = fopen ("sate.out", "w");
fscanf (f, "%d %d %d %d", &n, &m, &x, &y);
for (i = 1 ; i <= m ; i++){
fscanf (f, "%d %d %d", &a, &b, &c);
A[a].push_back(b);
A[b].push_back(a);
B[a].push_back(c);
B[b].push_back(c);
}
BFS (x);
fprintf (g, "%d", sol);
fclose(g);
fclose(f);
return 0;
}