#include <fstream>
#include <vector>
#include <cmath>
#include <queue>
int nr_sate, nr_relatii, start, dest;
std::vector < std::vector < std::pair <int, int> > > liste;
std::queue <int> q;
int main() {
std::ifstream in("sate.in");
in >> nr_sate >> nr_relatii >> start >> dest;
liste.assign(nr_sate + 1, std::vector < std::pair <int, int> >());
for(int i = 1; i <= nr_relatii; i++) {
int rel_origin, rel_dest, distance;
in >> rel_origin >> rel_dest >> distance;
liste[rel_origin].push_back({rel_dest, distance});
liste[rel_dest].push_back({rel_origin, -distance});
}
in.close();
std::vector <int> poz(nr_sate + 1, 0);
std:: vector <bool> viz(nr_sate + 1, false);
poz[start] = 0;
viz[start] = true;
q.push(start);
while(!q.empty()) {
int nod = q.front();
q.pop();
for(auto [vecin, deplasare] : liste[nod]) {
if(!viz[vecin]) {
viz[vecin] = true;
poz[vecin] = poz[nod] + deplasare;
q.push(vecin);
}
}
}
std::ofstream out("sate.out");
out<< std::abs(poz[dest]);
out.close();
return 0;
}