过不了样例
#include<bits/stdc++.h>
#define int long long
#define pii pair<int,int>
using namespace std;
int const maxn=5005;
int n,r,ans=INT_MAX;
int dis[maxn][2];
bitset<maxn>vis[2];
vector<pii>g[maxn];
priority_queue<pii,vector<pii>,greater<pii> >q;
void dij(int op)
{
while(!q.empty())
{
int u=q.top().second;
q.pop();
if(vis[op][u])
continue;
vis[op][u]=1;
for(auto i:g[u])
{
if(dis[i.second][op]>dis[u][op]+i.first)
{
dis[i.second][op]=dis[u][op]+i.first;
q.push({dis[i.second][op],i.second});
}
}
}
}
signed main()
{
scanf("%d%d",&n,&r);
while(r--)
{
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
g[u].push_back({w,v});
g[v].push_back({w,u});
}
memset(dis,0x3f,sizeof dis);
dis[1][0]=0;
q.push({0,1});
dij(0);
dis[n][1]=0;
q.push({0,n});
dij(1);
for(int i=1;i<=n;i++)
{
if(dis[i][0]+dis[i][1]==dis[n][0])
continue;
ans=min(ans,dis[i][0]+dis[i][1]);
// printf("%d %d\n",dis[i][0],dis[i][1]);
}
printf("%d",ans);
return 0;
}
//致敬传奇耐骑王Leo(uid:905636)
//他的吧唧生锈了hhhhhhh