zfchna 2022-08-29 22:11 采纳率: 50%
浏览 78
已结题

最短路问题,牛客比赛

问题遇到的现象和发生背景

img


img

题目链接:https://ac.nowcoder.com/acm/contest/39100/F

问题相关代码,请勿粘贴截图
#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
#include<map>
#include<cmath>
#include<queue>
#define int long long

using namespace std;
const int N=200010,mod=998244353;

int e[N],w[N],ne[N],h[N],idx,shu[N],d[N];

void add(int a,int b,int c)
{
    e[idx]=b,w[idx]=c,ne[idx]=h[a],h[a]=idx++;
}

void doo()
{
    memset(d,0x3f,sizeof d);
    priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>> >q;
    d[1]=0;
    q.push({0,1});
    while(q.size())
    {
        int t=q.top().second;
        q.pop();
        for(int i=h[t];i!=-1;i=ne[i])
        {
            int j=e[i];
            if(d[j]>d[t]+w[i])
            {
                d[j]=d[t]+w[i];
                q.push({d[j],j});
            }
        }
    }
}

signed main()
{
    int n,m;
    cin>>n>>m;
    memset(h,-1,sizeof h);
    int x,y,z;
    cin>>x>>y>>z;
    for(int i=1;i<=n;i++)cin>>shu[i];
    for(int i=1;i<=m;i++)
    {
        int u,v;
        cin>>u>>v;
        if(shu[u]==shu[v])add(u,v,min(x,y+z)),add(v,u,min(x,y+z));
        else add(u,v,min(y,x+z)),add(v,u,min(y,x+z));
    }
    doo();
    cout<<d[n]<<endl;
}

运行结果及报错内容

不明白自己的代码为啥错误,请帮忙看一看

  • 写回答

1条回答 默认 最新

  • 这次真没糖 2022-08-30 18:24
    关注

    目前看代码明面上的错误有:

    1. N定义小了,是双向路,应该再乘以2.
    2. 最短路里面没有标记访问的点,应该再开一个vis数组记录
    3. 数据量达到了2e5级别了,用scanf会明显快很多
    4. dis数组类型应该是long long,初始化用0x7f比较好

    其余的需要运行一下了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 9月7日
  • 已采纳回答 8月30日
  • 赞助了问题酬金10元 8月30日
  • 创建了问题 8月29日

悬赏问题

  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大
  • ¥15 Oracle中如何从clob类型截取特定字符串后面的字符
  • ¥15 想通过pywinauto自动电机应用程序按钮,但是找不到应用程序按钮信息
  • ¥15 如何在炒股软件中,爬到我想看的日k线
  • ¥15 seatunnel 怎么配置Elasticsearch
  • ¥15 PSCAD安装问题 ERROR: Visual Studio 2013, 2015, 2017 or 2019 is not found in the system.
  • ¥15 (标签-MATLAB|关键词-多址)
  • ¥15 关于#MATLAB#的问题,如何解决?(相关搜索:信噪比,系统容量)
  • ¥500 52810做蓝牙接受端