有没有大佬帮忙看看,最后一个点运行不出来,超时
#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;
}

京公网安备 11010502036488号