```cpp
#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#define N 2505
#define M 12405
#define W 2500005
using namespace std;
int n,m,s,t,cnt;
int fir[N],nex[M],val[M],dis[N],vis[N],poi[M];
vector<int>tong[W];
int re()
{
int x=0,p=1;
char y=getchar();
for(;y>'9'||y<'0';y=getchar())
if(y=='-')
p=-p;
for(;y>='0'&&y<='9';y=getchar())
x=x*10+y-'0';
return x*p;
}
void wr(int x)
{
if(x<0)
putchar('-'),x=-x;
if(x>9)
wr(x/10);
putchar(x%10+'0');
}
void ins(int x,int y,int z)
{
nex[++cnt]=fir[x];
poi[cnt]=y;
val[cnt]=z;
fir[x]=cnt;
}
signed main()
{
n=re(),m=re(),s=re(),t=re();
for(int i=1;i<=m;i++)
{
int u=re(),v=re(),w=re();
ins(u,v,w),ins(v,u,w);
}
memset(dis,127,sizeof(dis));
dis[s]=0,tong[0].push_back(s);
for(int i=0;i<=W;i++)
{
while(tong[i].size())
{
int now=tong[i].back();
tong[i].pop_back();
if(vis[now])continue;
vis[now]=1;
for(int i=fir[now];i;i=nex[i])
{
int p=poi[i];
if(dis[p]>dis[now]+val[i])
{
dis[p]=dis[now]+val[i];
tong[dis[p]].push_back(p);
}
}
}
}
wr(dis[t]);
return 0;
}
```
by _mi_ka_ @ 2022-09-09 09:36:05
> ```cpp
> for(int i=0;i<=W;i++)
> {
> while(tong[i].size())
> {
> ```
`i == W` 时越界。
by ud2_ @ 2022-09-09 10:05:06