为什么#10和#13一直WA
#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> ll;
struct node{
int nxt,to;
long long w;
}z[50050];
int h[5060],vis[5500],dis[5050];
long long lo[5550];
int n,m;
int cnt=0;
void add(int u,int v,int w){
cnt++;
z[cnt].to=v;
z[cnt].nxt=h[u];
z[cnt].w=w;
h[u]=cnt;
}
void diji(){
memset(dis,0x3f3f3f3f,sizeof(dis));
memset(vis,0,sizeof(vis));
// memset(lo,0x3f3f,sizeof(lo));
dis[1]=0;
priority_queue<ll,vector<ll>,greater<ll> > q;
q.push(make_pair(0,1));
lo[1]=0;
//cout<<endl<<endl;
while(!q.empty()){
int x=q.top().second;
//cout<<x<<endl;
q.pop();
// if(vis[x]==1) continue;
//else{
// vis[x]=1;
// }
for(int i=h[x];i;i=z[i].nxt){
int y=z[i].to;
long long w=z[i].w;
if(dis[y]+lo[y]>dis[x]+w+max(w,lo[x])){
//cout<<x<<" "<<y<<": "<<lo[y]+dis[y];
//cout<<" "<<dis[x]+w+max(w,lo[x])<<endl;
dis[y]=dis[x]+w;
if(lo[y]!=0){
lo[y]=min(lo[y],max(w,lo[x]));
}
else{
lo[y]=max(w,lo[x]);
}
// cout<<x<<" "<<y<<": "<<lo[y];
// cout<<" "<<dis[y]<<endl;
q.push(make_pair(-dis[y],y));
}
}
}
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++){
int u,v;
long long w;
scanf("%d%d%lld",&u,&v,&w);
lo[v]=max(lo[v],w);
add(u,v,w);
add(v,u,w);
}
diji();
// cout<<lo[n]<<" ";
printf("%d",dis[n]+lo[n]);
}