#include<stdio.h> #include<stdlib.h> #include<vector> using namespace std; #define mx 505 int dis[mx]; bool visited[mx]; struct node { int city; int d; }; vector<node> edge[mx]; int S,D;// int main() { int n,m; scanf("%d %d %d %d",&n,&m,&S,&D); for(int i=0;i<n;i++) edge[i].clear(); for(int i=0;i<m;i++) { int a,b,d,c; scanf("%d %d %d",&a,&b,&d); node tmp; tmp.d=d; tmp.city=b; edge[a].push_back(tmp); tmp.city=a; edge[b].push_back(tmp); } for(int i=0;i<n;i++) { dis[i]=-1; visited[i]=false; } //core algorithm int nowP=S; dis[nowP]=0; visited[nowP]=true; for(int i=0;i<n;i++) { for(int j=0;j<edge[nowP].size();j++){ int tmp=edge[nowP][j].city; int dist=edge[nowP][j].d; if(visited[tmp]==true) continue; if(dis[tmp]==-1||dis[tmp]>dis[nowP]+dist) { dis[tmp]=dis[nowP]+dist; } } int min=123456789; for(int j=0;j<n;j++) { if(dis[j]==-1) continue; if(visited[j]==true) continue; if(dis[j]<min) { min=dis[j]; nowP=j; } } visited[nowP]=true; } printf("%d\n",dis[D]); return 0; }