Pagini recente » Cod sursa (job #1516777) | Cod sursa (job #640863) | Cod sursa (job #1615434) | Cod sursa (job #2031782) | Cod sursa (job #400901)
Cod sursa(job #400901)
#include <stdio.h>
#include <vector>
#define Nmax 30010
using namespace std;
vector < pair <int, int> > A[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].first;
if (viz[fiu] == 0){
viz[fiu] = 1;
sgn = 1;
coada[u] = fiu;
if (coada[ p ] > fiu)
sgn = -1;
D[u] = D[p] + A[nod][i].second * 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( make_pair(b, c) );
A[b].push_back( make_pair(a, c) );
}
BFS (x);
fprintf (g, "%d", sol);
fclose(g);
fclose(f);
return 0;
}