<pre name="code" class="cpp">
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <map>
#include <vector>
#include <queue>
#include <stack>
#define maxn 100005
#define INF 999999999
using namespace std;
struct edge
{
int to;
int cost;
int from;
};
int V,E; //V:顶点数,E:边数。
edge es[maxn]; //存储每条边。
int d[maxn]; //记录每个顶点的最短路径。
void shortest_path(int s) //最短路
{
for(int i = 0;i <V; i++)
d[i] = INF;
d[s] = 0;
while(true)
{
bool update = false;
for(int i = 0; i < 2*(E); i ++)
{
edge e = es[i];
if(d[e.from] != INF && d[e.to] > d[e.from]+e.cost)
{
d[e.to] = d[e.from]+e.cost;
update = true;
}
}
if(!update)break;
}
}
int main()
{
int i, a,j;
int T, S, D;
int min1;
int p[1000],q[100000] ;
edge b;
while(~scanf("%d%d",&V,&E))
{
for(i= 0;i < 2*E; i++)
{
scanf("%d%d%d",&es[i].from, &es[i].to, &es[i].cost);
i++;
es[i].from = es[i-1].to;
es[i].to = es[i-1].from;
es[i].cost = es[i-1].cost;
}
scanf("%d%d",&T,&S);
shortest_path(T);
if(d[S] == INF)printf("-1\n"); //增加此步讨论而已。。
else printf("%d\n", d[S]);
//shortest_path(1);
//for(i = 0; i <= V; i ++)
//printf("%d\n",d[i]);
// printf("%d\n",d[V]);
}
return 0;
}