有没有大佬帮忙看看,最后一个点运行不出来,超时
#include<bits/stdc++.h> using namespace std; const int N=1e5+5; int n,m,hh; struct edge{ int to,ne,w,d; }e[3*N]; int dis[N],h[N],cnt,vis[N]; void add(int u,int v,int w,int d){ cnt++; e[cnt].to=v; e[cnt].w=w; e[cnt].ne=h[u]; e[cnt].d=d; h[u]=cnt; } struct xx{ int dis,pos; bool operator <(const xx &a) const{ return a.dis<dis; } }; int dijkstr(int mid){ priority_queue<xx> q; memset(dis,0x3f,sizeof dis); memset(vis,0,sizeof vis); q.push({0,1}); dis[1]=0; while(!q.empty()){ auto t=q.top(); q.pop(); int x=t.pos; if(vis[x]) continue; vis[x]=1; for(int i=h[x];i;i=e[i].ne){ int y=e[i].to; if(e[i].w<mid) continue; if(dis[y]>dis[x]+e[i].d){ dis[y]=dis[x]+e[i].d; q.push({dis[y],y}); } } } return dis[n]<=hh; } int main(){ cin>>n>>m>>hh; for(int i=0;i<m;i++){ int u,v,w,d; cin>>u>>v>>w>>d; add(u,v,w,d); add(v,u,w,d); } int l=0,r=2e9; while(l<r){ int mid=l+r+1>>1; if(dijkstr(mid)) l=mid; else r=mid-1; } if(dijkstr(l)) cout<<l; else cout<<-1; }