#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
int T,C,Ts,Te,a[10001],k,h[10001],dis[10001],minn,Rs,Re,Ci,x;
struct Edges
{
int nxt,val,to;
}Edge[10001];
void add(int from,int to,int val)
{
Edge[++k].to=to;
Edge[k].val=val;
Edge[k].nxt=h[from];
h[from]=k;
}
int main()
{
int i,j;
cin>>T>>C>>Ts>>Te;
memset(dis,0x7fffffff,sizeof(dis));
dis[Ts]=0;
for(i=1;i<=C;i++)
{
cin>>Rs>>Re>>Ci;
add(Rs,Re,Ci);
add(Re,Rs,Ci);
}
for(i=1;i<=T;i++)
{
minn=0x7fffffff;
x=0;
for(j=1;j<=T;j++)
if(a[j]==0&&dis[j]<minn)
{
minn=dis[j];
x=j;
}
if(x==0)
break;
a[x]=1;
for(j=h[x];j;j=Edge[j].nxt)
dis[Edge[j].to]=min(dis[Edge[j].to],dis[x]+Edge[j].val);
}
cout<<dis[Te];
return 0;
}
题目