Pagini recente » Cod sursa (job #1990880) | Cod sursa (job #1397157) | Cod sursa (job #1548122) | Cod sursa (job #690419) | Cod sursa (job #2933556)
//problema sate
#include <fstream>
#include <vector>
#include <queue>
#define N 30002
using namespace std;
ifstream cin("sate.in");
ofstream cout("sate.out");
vector<pair<int, int> > V[N];
int n, m, X, Y;
int viz[N], dist[N];
void BFS(int node){
viz[node] = true;
queue<int> Q;
Q.push(node);
while(!Q.empty()){
node = Q.front();
for (vector<pair<int, int> >::iterator it = V[node].begin(); it != V[node].end(); it++){
if(!viz[(*it).first]){
viz[(*it).first] = true;
if((*it).first > node){
dist[(*it).first] = dist[node] + (*it).second;
}
else{
dist[(*it).first] = dist[node] - (*it).second;
}
Q.push((*it).first);
}
}
Q.pop();
}
}
int main(){
cin >> n >> m >> X >> Y;
for (int i = 0; i < m; i++){
int x1, x2, Dist;
cin >> x1 >> x2 >> Dist;
V[x1].push_back(make_pair(x2, Dist));
V[x2].push_back(make_pair(x1, Dist));
}
dist[X] = 0;
BFS(X);
cout << dist[Y] ;
return 0;
}