#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream fin("sate.in");
ofstream fout("sate.out");
int n, m;
vector<vector<pair<int, int>>> adj;
vector<int> viz;
vector<int> dist;
int BFS(int src, int fin)
{
queue<int> q;
q.push(src);
dist[src] = 0;
viz[src] = 1;
int dist_fin = 0;
while (!q.empty())
{
int nod = q.front();
q.pop();
for (auto &vecin : adj[nod])
{
int i = vecin.first;
int cost = vecin.second;
if (!viz[i])
{
viz[i] = 1;
if (nod == src)
{
dist[i] = cost;
}
if (i < nod)
{
dist[i] = dist[nod] - cost;
}
if (i > nod)
{
dist[i] = dist[nod] + cost;
}
q.push(i);
}
}
}
return dist[fin];
}
int main()
{
int x, y;
fin >> n >> m >> x >> y;
adj.resize(n + 5);
viz.resize(n + 5);
dist.resize(n + 5);
for (int i = 1; i <= n; i++)
{
dist[i] = 0;
viz[i] = 0;
}
for (int i = 0; i < m; i++)
{
int a, b, d;
fin >> a >> b >> d;
adj[a].push_back({b, d});
adj[b].push_back({a, d});
}
fout << BFS(x, y);
return 0;
}