#include <fstream>
#include <vector>
std::ifstream f ("sate.in");
std::ofstream g ("sate.out");
int dfs(int x, int y, const std::vector<std::vector<std::pair<int, int>>>& adj, std::vector<bool>& marked) {
marked[x] = true;
if (x == y) return 0;
int mini = 20000001;
for (auto nb : adj[x]) {
if (!marked[nb.first]) {
int d = nb.second + dfs(nb.first, y, adj, marked);
if (mini > d) mini = d;
}
}
return mini;
}
int main() {
int n, m, X, Y;
f >> n >> m >> X >> Y;
std::vector<std::vector<std::pair<int, int>>> adj(n+1);
for (int i = 1; i <= m; i++) {
int x, y, d; f >> x >> y >> d;
adj[x].emplace_back(std::make_pair(y, d));
adj[y].emplace_back(std::make_pair(x, -d));
}
std::vector<bool> marked(n+1, false);
g << dfs(X, Y, adj, marked);
return 0;
}