1 #include<cstdio>
2 #include<iostream>
3 #include<cstring>
4 #include<queue>
5 using namespace std;
6 int dis[100010],u[100010],v[100100],head[100010],next[100010],exist[100010];
7 int n,m,S,T,x,y,z,tot=0;
8 queue<int> q;
9 void bianbao(int x,int y,int z){
10 u[++tot]=y;
11 v[tot]=z;
12 next[tot]=head[x];
13 head[x]=tot;
14 }
15 void spfa(){
16 memset(dis,127,sizeof(dis));
17 dis[S]=0;
18 q.push(S);
19 exist[S]=1;
20 while(!q.empty()){
21 int p=q.front();
22 q.pop();
23 exist[p]=0;
24 for(int i=head[p];i;i=next[i])
25 if(dis[u[i]]>dis[p]+v[i]){
26 dis[u[i]]=dis[p]+v[i];
27 if(!exist[u[i]]){
28 exist[u[i]]=1;
29 q.push(u[i]);
30 }
31 }
32 }
33 printf("%d\n",dis[T]);
34 }
35 int main()
36 {
37 scanf("%d%d%d%d",&n,&m,&S,&T);
38 for(int i=1;i<=m;i++){
39 scanf("%d%d%d",&x,&y,&z);
40 bianbao(x,y,z);bianbao(y,x,z);
41 }
42 spfa();
43 return 0;
44 }