#include <queue>
#include <cstring>
#include <algorithm>
#include <cstdio>
#define maxn 213
#define inf 1e9
using namespace std;
int map[maxn][maxn];
bool vis[maxn];
int dis[maxn];
int n, m, s, t;
queue<int> que;
void init()
{
for(int i = 0; i < maxn; ++i)
for(int j = 0; j < maxn; ++j)
if(i == j) map[i][j] = 0;
else map[i][j] = inf;
memset(vis, false, sizeof(vis));
fill(dis, dis+maxn, inf);
}
void spfa()
{
que.push(s); vis[s] = true; dis[s] = 0;
while( !que.empty() )
{
int x = que.front(); que.pop(); vis[x] = false;
for(int i = 0; i < n; ++i)
{
if( dis[x] + map[x][i] < dis[i])
{
dis[i] = dis[x] + map[x][i];
if( !vis[i] )
{
que.push(i);
vis[i] = true;
}
}
}
}
}
int main()
{
while( ~scanf("%d%d", &n, &m) )
{
init();
while(m--)
{
int a, b, x;
scanf("%d%d%d", &a, &b, &x);
if(x < map[a][b])
map[a][b] = map[b][a] = x;
}
scanf("%d%d", &s, &t);
spfa();
printf("%d\n", dis[t] = dis[t] == inf ? -1: dis[t]);
}
}
最短路的板子问题,直接spfa解决了