板子题
/*
qq:1239198605
ctgu_yyf
*/
#include<iostream>
#include<cstdio>
#include<string>
#include<vector>
#include<queue>
#include<stack>
#include<cstring>
#include<algorithm>
#include<cmath>
#define ll long long
using namespace std;
int inf=0x3f3f3f3f;
int dis[202],map[202][202],n,m,s,t,vis[202];
void djstra(int x)
{
//初始化标记数组
memset(vis,0,sizeof(vis));
vis[x]=1;
for(int i=0;i<n;i++)
dis[i]=map[x][i];
dis[x]=0;
for(int i=0;i<n;i++)
{
if(i==x)
continue;
int min=inf;
int u=-1;
for(int j=0;j<n;j++)
{
if(vis[j]==0&&dis[j]<min)
{
min=dis[j];
u=j;
}
}
//没找到就退出
if(u==-1)
break;
vis[u]=1;
for(int z=0;z<n;z++)
if(vis[z]==0&&dis[u]+map[u][z]<dis[z])
dis[z]=dis[u]+map[u][z];
}
}
int main()
{
ios::sync_with_stdio(false);
int k,l,v;
while(cin>>n>>m)
{
//初始化
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
map[i][j]=inf;
for(int i=0;i<m;i++)
{
cin>>k>>l>>v;
map[k][l]=min(map[k][l],v);
map[l][k]=min(map[l][k],v);
}
cin>>s>>t;
djstra(s);
if(dis[t]==inf)
cout<<"-1"<<endl;
else
cout<<dis[t]<<endl;
}
return 0;
}