P5837求助
  • 板块灌水区
  • 楼主Yeonjun_0913
  • 当前回复3
  • 已保存回复3
  • 发布时间2025/1/25 16:47
  • 上次更新2025/1/26 12:48:45
查看原帖
P5837求助
1432988
Yeonjun_0913楼主2025/1/25 16:47

题目传送门

dijkstra部分:

第一版

void dij(int maxn){
    q=priority_queue<PII,vector<PII>,greater<PII>>();
    for (int i=1;i<=n;i++){
        dis[i]=0x3f3f3f3f;
        vis[i]=0;
    }
    dis[1]=0;
    q.push(make_pair(0,1));
    while (!q.empty()){
        int u=q.top().second;
        q.pop();
        if (vis[u]) continue;
        vis[u]=true;
        for (int i=head[u];i;i=g[i].nxt){
            int v=g[i].to,w=g[i].value,f=g[i].f;
            if (f<maxn) continue;
            if (dis[v]>dis[u]+w){
                dis[v]=dis[u]+w;
                q.push(make_pair(dis[v],v));
            }
        }
    }
}

第二版

void dij(int maxn){
    q=priority_queue<PII,vector<PII>,greater<PII>>();
    // for (int i=1;i<=n;i++){
    //     dis[i]=0x3f3f3f3f;
    //     vis[i]=0;
    // }
    memset(dis,0x3f,sizeof(dis));
    memset(vis,0,sizeof(vis));
    dis[1]=0;
    q.push(make_pair(0,1));
    while (!q.empty()){
        int u=q.top().second;
        q.pop();
        if (vis[u]) continue;
        vis[u]=true;
        for (int i=head[u];i;i=g[i].nxt){
            int v=g[i].to,w=g[i].value,f=g[i].f;
            if (f<maxn) continue;
            if (dis[v]>dis[u]+w){
                dis[v]=dis[u]+w;
                q.push(make_pair(dis[v],v));
            }
        }
    }
}

两版在lg上都AC,但在其他平台上第一版有问题,把for循环重置数组改成第二版的两个memset就好了,有没有大佬告诉孩子为什么啊?

2025/1/25 16:47
加载中...