Pagini recente » Cod sursa (job #2630214) | Cod sursa (job #427269) | Cod sursa (job #2706226) | Cod sursa (job #1614071) | Cod sursa (job #2825185)
#include <fstream>
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
struct drum{
int vec, dis;
};
vector<drum> L[30010];
queue<int> q;
int dm[30010], n, m, X, Y, a, b, d;
int main () {
ifstream fin ("sate.in");
ofstream fout ("sate.out");
fin>>n>>m>>X>>Y;
for (int i=1;i<=n;i++){
dm[i]=INT_MAX;
}
for (int i=1;i<=m;i++){
fin>>a>>b>>d;
L[a].push_back({b, d});
L[b].push_back({a, d});
}
q.push(X);
dm[X]=0;
while (!q.empty()){
for (int i=0;i<L[q.back()].size();i++){
drum x = L[q.back()][i];
if (q.back()<x.vec){
if (dm[q.back()]+x.dis<dm[x.vec]){
dm[x.vec] = dm[q.back()]+x.dis;
q.push(x.vec);
}
}
if (q.back()>x.vec){
if (dm[q.back()]-x.dis<dm[x.vec]){
dm[x.vec] = dm[q.back()]-x.dis;
q.push(x.vec);
}
}
}
q.pop();
}
fout<<dm[Y];
return 0;
}