#include<iostream> #include<cstdio> #include<cstring> using namespace std; const int INF=1<<30; int cost[300][300]; int d[300]; bool used[300]; int a,b,c,D,e,f,g;//a是顶点数 void dijkstra(int s) {int mine,v; fill(d,d+a,INF); fill(used,used+a,false); d[s]=0; for(int i = 0;i<a;i++) d[i] = cost[s][i]; for(int i=1;i<a;i++) { mine=INF; for(int u=0;u<a;u++) { if(!used[u]&&d[u]<mine) {mine=d[u]; v=u;} } used[v]=true; for(int u=0;u<a;u++) {if(d[u]>d[v]+cost[v][u]&&!used[u]) d[u]=d[v]+cost[v][u]; } } } int main() { while(cin>>a>>b) { for(int i = 0; i<200; i++) { for(int j = 0; j<200; j++) cost[i][j] = INF; cost[i][i] = 0; } for(int i=0;i<b;i++) { cin>>c>>D>>e; if(cost[c][D]>e) cost[D][c]=cost[c][D]=e; } cin>>f>>g; dijkstra(f); printf("%d\n",d[g]==INF?-1:d[g]); } return 0; }