#include<bits/stdc++.h>
using namespace std;
int n,m,qq[1005],dis[1005],mx;
struct eg{
int v,w;
};
vector<eg>g[1005];
bool found[1005];
inline void dijkstra(){
memset(dis,0x3f,sizeof(dis));
memset(found,false,sizeof(found));
dis[1]=0;
while(true){
int u=-1;
for(register int i=1;i<=n;i++){
if(!found[i] && (u==-1 || dis[i]<dis[u]))
u=i;
}
if(u==-1)
break;
found[u]=true;
for(register int i=0;i<g[u].size();i++){
int v=g[u][i].v;
if(dis[v]>dis[u]+g[u][i].w){
dis[v]=dis[u]+g[u][i].w;
qq[v]=u;
}
}
}
}
inline void dij(int d,int e){
memset(dis,0x3f,sizeof(dis));
memset(found,false,sizeof(found));
dis[1]=0;
while(true){
int u=-1;
for(register int i=1;i<=n;++i){
if(!found[i] && (u==-1 || dis[i]<dis[u]))
u=i;
}
if(u==-1)
break;
found[u]=true;
for(register int i=0;i<g[u].size();++i){
int v=g[u][i].v;
if(!(d==u && e==v || d==v && e==u) && dis[v]>dis[u]+g[u][i].w){
dis[v]=dis[u]+g[u][i].w;
}
}
}
}
int main(){
scanf("%d%d",&n,&m);
for(register int i=1,u,v,w;i<=m;i++){
scanf("%d%d%d",&u,&v,&w);;
g[u].push_back({v,w});
g[v].push_back({u,w});
}
dijkstra();
int r=n;
while(r!=1){
dij(qq[r],r);
mx=max(mx,dis[n]);
r=qq[r];
}
cout<<mx;
return 0;
}
99分,最后一个点没过
Imakf我谢谢你