题解 | #游游的正方形披萨#

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

全部评论

相关推荐

不知道怎么取名字_:两个方向 1.简历针对性准备下 2.面试前也需要准备的 主要还是要看各个公司需求,看公司行业和岗位描述,那里面已经写了对技术的需求,一份简历,不可能和所有嵌入式岗位都匹配的
投递北京经纬恒润科技股份有限公司等公司6个岗位
点赞 评论 收藏
分享
代码飞升_不回私信人...:别这样贬低自己,降低预期,放平心态,跟昨天的自己比。做好自己,反而会效率更高心态更好,加油兄弟
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务