#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
int dp[10010][10010];
using namespace std;
int main()
{
int i,j,k,m,n,so,to;
scanf("%d%d",&m,&n);
scanf("%d%d",&so,&to);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
dp[i][j]=100010;
for(i=1;i<=m;i++)
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
dp[a][b]=c; //建图
dp[b][a]=c;
}
for(k=1;k<=n;k++)
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(dp[i][j]>dp[i][k]+dp[k][j]) //一开始都赋为INF
dp[i][j]=dp[i][k]+dp[k][j]; //以k为中间点,dp[i][j]表示从到j最短路,本质是一个DP
printf("%d",dp[so][to]);
return 0;
}
#include<cstdlib>
#include<cstring>
#include<iostream>
int dp[10010][10010];
using namespace std;
int main()
{
int i,j,k,m,n,so,to;
scanf("%d%d",&m,&n);
scanf("%d%d",&so,&to);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
dp[i][j]=100010;
for(i=1;i<=m;i++)
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
dp[a][b]=c; //建图
dp[b][a]=c;
}
for(k=1;k<=n;k++)
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(dp[i][j]>dp[i][k]+dp[k][j]) //一开始都赋为INF
dp[i][j]=dp[i][k]+dp[k][j]; //以k为中间点,dp[i][j]表示从到j最短路,本质是一个DP
printf("%d",dp[so][to]);
return 0;
}