WA on#3 and Hack 为什么改成spfa就对
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define pi make_pair
#define pb push_back
const int N=5005;
int n,m;
vector<pair<int,int> >e[N];
bool vis[N];
int dis[N][2];
priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > > r;
void dij()
{
for(int i=1;i<n;i++) dis[i][0]=dis[i][1]=1e18;
dis[n][1]=1e18;
r.push(pi(0,n));
while(!r.empty()){
int u=r.top().second;r.pop();
if(vis[u]) continue;
vis[u]=1;
for(auto vv:e[u]){
int v=vv.first,w=vv.second;
bool f=0;
if(dis[u][0]+w<dis[v][0]){
dis[v][1]=dis[v][0];
dis[v][0]=dis[u][0]+w;
f=1;
}
if(dis[u][0]+w<dis[v][1] && dis[u][0]+w>dis[v][0]) dis[v][1]=dis[u][0]+w,f=1;
if(dis[u][1]+w<dis[v][1]) dis[v][1]=dis[u][1]+w,f=1;
if(f) r.push(pi(dis[v][0],v));
}
}
cout<<dis[1][1];
}
signed main()
{
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
cin>>n>>m;
for(int i=1,u,v,w;i<=m;i++){
cin>>u>>v>>w;
e[u].pb({v,w});e[v].pb({u,w});
}
dij();
return 0;
}