#include <bits/stdc++.h>
using namespace std;
// bfs din x, daca mergem catre un sat cu nr mai mare adunam, daca nu, scadem, suma finala e distanta
int main() {
ifstream fin("sate.in");
ofstream fout("sate.out");
int n, m, x, y;
fin>>n>>m>>x>>y;
if ( x>y) swap(x, y);
vector<vector<pair<int,int>>> g(n+1);
for ( int i=0; i<m; i++) {
int a, b, d;
fin>>a>>b>>d;
g[a].push_back({b, d});
g[b].push_back({a, d});
}
vector<long long> dist(n+1, 0);
vector<bool> viz(n+1, false);
queue<int> q;
q.push(x);
viz[x]=true;
while ( !q.empty()) {
int nod=q.front(); q.pop();
if ( nod== y) break;
for ( auto [vec, d] : g[nod]) {
if ( viz[vec]) continue;
viz[vec]=true;
if ( vec>nod) dist[vec]=dist[nod]+d; // mergem inainte
else dist[vec]=dist[nod]-d; // mergem inapoi
q.push(vec);
}
}
fout<<dist[y]<<"\n";
return 0;
}