#include<bits/stdc++.h>
using namespace std;#definedbdouble#definelllonglong#definePirpair<int,int>#definefifirst#definesesecond#definepbpush_back#definem_pmake_pair#defineinf0x3f3f3f3f#defineINF0x3f3f3f3f3f3f3f3f/*==========ACMer===========*/constint N =2550, M =6205*2;int n, m, s, t;structEdge{
int v, w, ne;} e[M];int h[N], tot;voidadd(int u,int v,int w){
e[++ tot]= Edge{
v, w, h[u]}; h[u]= tot;}int dis[N], vis[N];intdijkstra(){
priority_queue<Pir, vector<Pir>, greater<Pir>> q;memset(dis, inf,sizeof dis);
dis[s]=0;//源点初始化为 0 别忘了
q.push({
0, s });while(q.size()){
int u = q.top().se; q.pop();if(u == t)return dis[t];if(vis[u])continue;
vis[u]=1;for(int i = h[u]; i; i = e[i].ne){
int v = e[i].v, w = e[i].w;if(dis[v]> dis[u]+ w){
dis[v]= dis[u]+ w;
q.push({
dis[v], v });}}}return dis[t];}intmain(){
scanf("%d %d %d %d",&n,&m,&s,&t);int u, v, w;for(int i =0; i < m; i ++){
scanf("%d %d %d",&u,&v,&w);add(u, v, w);add(v, u, w);}printf("%d\n",dijkstra());return0;}