Pagini recente » Cod sursa (job #2116599) | Cod sursa (job #1599172) | Cod sursa (job #3125248) | Cod sursa (job #2301112) | Cod sursa (job #400896)
Cod sursa(job #400896)
#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, l, fiu;
int D[Nmax], coada[Nmax];
char viz[Nmax];
void BFS (int nod){
p = 1;
u = 2;
coada[ p ] = nod;
viz[nod] = 1;
while (p <= u){
nod = coada[p];
if (ok == 100)
break;
l = A[nod].size();
for (i = 0 ; i < l ; i++) {
fiu = A[nod][i];
if (viz[fiu] == 0){
viz[fiu] = 1;
sgn = 1;
coada[u] = fiu;
if (coada[ p ] > fiu)
sgn = -1;
D[u] = D[p] + B[nod][i]*sgn;
if (fiu == 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;
}