Pagini recente » Cod sursa (job #2293255) | Cod sursa (job #47233) | Cod sursa (job #1836883) | Cod sursa (job #804851) | Cod sursa (job #1557647)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#define inf 1<<30
#define nmax 30005
using namespace std;
int n, m, x, y, dist[nmax], viz[nmax];
vector <pair <int, int> > G[nmax];
queue <int> Q;
void read(){
int n1, n2, d;
ifstream f("sate.in");
f >> n >> m >> x >> y;
for(int i=1; i<=m; i++){
f >> n1 >> n2 >> d;
G[n1].push_back(make_pair(n2, d));
G[n2].push_back(make_pair(n1, d));
}
}
void setdist(int st){
for(int i=1; i<=n; i++)
dist[i] = -1,
viz[i] = 0;
dist[st] = 0;
viz[st] = 1;
Q.push(st);
}
void dijkstra(){
int nod = 0, v = 0, w = 0;
while(!Q.empty()){
nod = Q.front();
Q.pop();
for(int i=0; i<G[nod].size(); i++){
v = G[nod][i].first;
w = G[nod][i].second;
if(dist[v] == -1){
if(nod < v)
dist[v] = dist[nod] + w;
else
dist[v] = dist[nod] - w;
viz[v] = 1;
Q.push(v);
}
}
}
}
int main()
{
read();
setdist(x);
dijkstra();
ofstream g("sate.out");
g << dist[y];
return 0;
}