Pagini recente » Diferente pentru problema/pro3 intre reviziile 15 si 3 | Cod sursa (job #2456878) | Diferente pentru problema/dijkstra intre reviziile 9 si 8 | Cod sursa (job #672700) | Cod sursa (job #1517079)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("sate.in");
ofstream fout("sate.out");
typedef struct nod{
int k,d;
nod* next;
} *lnod;
lnod A[30010];
int C[200000],cod,drum[30010], N, M, X, Y;
bool B[30010],found;
void add(lnod &a,int key, int d){
lnod b = new nod;
b->k = key;
b->d = d;
b->next = a;
a = b;
}
void bfs(int i){
B[i] = 1;
for(lnod l = A[i];l && !found;l = l->next){
if(!B[l->k]) {
C[++cod] = l->k;
if(l->k > i)
drum[l->k] = drum[i] + l->d;
else
drum[l->k] = drum[i] + l->d * -1;
if(l->k == Y) found = true;
}
}
}
int main(){
fin >> N >> M >> X >> Y;
if(X == Y){
fout << 0;
return 0;
}
if(X > Y) swap(X,Y);
int x,y,d;
for(int i = 0;i<M;i++){
fin >> x >> y >> d;
add(A[x],y,d);
add(A[y],x,d);
}
C[++cod] = X;
do{
bfs(C[cod--]);
}while(cod > 0 && !found);
if(found) fout << drum[Y];
return 0;
}