news 2026/4/3 4:12:34

2024年信奥赛C++提高组csp-s初赛真题及答案解析(完善程序第2题)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
2024年信奥赛C++提高组csp-s初赛真题及答案解析(完善程序第2题)

2024年信奥赛C++提高组csp-s初赛真题及答案解析(完善程序第2题)

第 2 题

(次短路)已知一个有 n个点 m条边的有向图 G**,并且给定图中的两个点 s 和 t,求次短路(长度严格大于最短路的最短路径)。如果不存在,输出一行 −1。如果存在,输出两行,第一行表示次短路的长度,第二行表示次短路的一个方案。

#include<cstdio>#include<queue>#include<utility>#include<cstring>usingnamespacestd;constintmaxn=2e5+10,maxm=1e6+10,inf=522133279;intn,m,s,t;inthead[maxn],nxt[maxm],to[maxm],w[maxm],tot=1;intdis[maxn<<1],*dis2;intpre[maxn<<1],*pre2;boolvis[maxn<<1];voidadd(inta,intb,intc){++tot;nxt[tot]=head[a];to[tot]=b;w[tot]=c;head[a]=tot;}boolupd(inta,intb,intd,priority_queue<pair<int,int>>&q){if(d>=dis[b])returnfalse;if(b<n)___①___;q.push(___②___);dis[b]=d;pre[b]=a;returntrue;}voidsolve(){priority_queue<pair<int,int>>q;q.push(make_pair(0,s));memset(dis,___③___,sizeof(dis));memset(pre,-1,sizeof(pre));dis2=dis+n;pre2=pre+n;dis[s]=0;while(!q.empty()){intaa=q.top().second;q.pop();if(vis[aa])continue;vis[aa]=true;inta=aa%n;for(inte=head[a];e;e=nxt[e]){intb=to[e],c=w[e];if(aa<n){if(!upd(a,b,dis[a]+c,q))___④__;}else{upd(n+a,n+b,dis2[a]+c,q);}}}voidout(inta){if(a!=s){if(a<n)out(pre[a]);elseout(___⑤___);}printf("%d%c",a%n+1," \n"[a==n+t]);}intmain(){scanf("%d%d%d%d",&n,&m,&s,&t);s--,t--;for(inti=0;i<m;++i){inta,b,c;scanf("%d%d%d",&a,&b,&c);add(a-1,b-1,c);}solve();if(dis2[t]==inf)puts("-1");else{printf("%d\n",dis2[t]);out(n+t);}}
  1. ① 处应填( )
    A.upd(pre[b], n+b, dis[b], q)
    B.upd(a, n+b, d, q)
    C.upd(pre[b], b, dis[b], q)
    D.upd(a, b, d, q)
  2. ② 处应填( )
    A.make_pair(-d, b)
    B.make_pair(d, b)
    C.make_pair(b, d)
    D.make_pair(-b, d)
  3. ③ 处应填( )
    A.0xff
    B.0x1f
    C.0x3f
    D.0x7f
  4. ④ 处应填( )
    A.upd(a, n+b, dis[a]+c, q)
    B.upd(n+a, n+b, dis2[a]+c, q)
    C.upd(n+a, b, dis2[a]+c, q)
    D.upd(a, b, dis[a]+c, q)
  5. ⑤ 处应填( )
    A.pre2[a%n]
    B.pre[a%n]
    C.pre2[a]
    D.pre[a%n]+1
题解:

本题要求求解有向图中从起点 (s) 到终点 (t) 的严格次短路(长度严格大于最短路)。代码采用 Dijkstra 算法的变种,将每个节点拆分成两个点:原点(对应最短路)和次短点(对应次短路),分别用距离数组dis[0..n-1]dis[n..2n-1]记录。通过优先队列同时更新最短路和次短路,并记录前驱以输出路径。

算法思路:
  • 使用双倍点集,分别维护最短路和次短路。
  • 在 Dijkstra 过程中,从队列取出点 (aa),若 (aa < n) 则为原点,否则为次短点。
  • 更新时,若成功更新最短路,则将原最短路转移为次短路候选;若失败,则尝试更新次短路。
  • 最终若次短路存在(dis2[t] != inf),则输出长度并递归输出路径。
填空解析:
  1. :当更新原点 (b) 的最短路时,需要将原有的最短路作为次短路候选,因此调用upd(pre[b], n+b, dis[b], q),选A
  2. :优先队列默认大顶堆,为实现小顶堆需存入负距离,因此为make_pair(-d, b),选A
  3. :距离数组初始化为极大值,inf = 522133279,(十六进制为0x1f1f1f1f),,选B
  4. :当最短路更新失败时,当前距离可能成为次短路,因此尝试用该距离更新次短点,调用upd(a, n+b, dis[a]+c, q),选A
  5. :输出次短路路径时,对于次短点 (a)((a \ge n)),其前驱为pre[a],即pre2[a%n],选A

专栏推荐:信奥赛C++提高组csp-s初赛&复赛真题题解(持续更新)
https://blog.csdn.net/weixin_66461496/category_13125089.html


各种学习资料,助力大家一站式学习和提升!!!

#include<bits/stdc++.h>usingnamespacestd;intmain(){cout<<"########## 一站式掌握信奥赛知识! ##########";cout<<"############# 冲刺信奥赛拿奖! #############";cout<<"###### 课程购买后永久学习,不受限制! ######";return0;}

1、csp信奥赛高频考点知识详解及案例实践:

CSP信奥赛C++动态规划:
https://blog.csdn.net/weixin_66461496/category_13096895.html点击跳转

CSP信奥赛C++标准模板库STL:
https://blog.csdn.net/weixin_66461496/category_13108077.html 点击跳转

信奥赛C++提高组csp-s知识详解及案例实践:
https://blog.csdn.net/weixin_66461496/category_13113932.html

2、csp信奥赛冲刺一等奖有效刷题题解:

CSP信奥赛C++初赛及复赛高频考点真题解析(持续更新):https://blog.csdn.net/weixin_66461496/category_12808781.html 点击跳转

CSP信奥赛C++一等奖通关刷题题单及题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12673810.html 点击跳转

3、GESP C++考级真题题解:

GESP(C++ 一级+二级+三级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12858102.html 点击跳转

GESP(C++ 四级+五级+六级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12869848.html 点击跳转


GESP(C++ 七级+八级)真题题解(持续更新):
https://blog.csdn.net/weixin_66461496/category_13117178.html

4、CSP信奥赛C++竞赛拿奖视频课:

https://edu.csdn.net/course/detail/40437 点击跳转

· 文末祝福 ·

#include<bits/stdc++.h>usingnamespacestd;intmain(){cout<<"跟着王老师一起学习信奥赛C++";cout<<" 成就更好的自己! ";cout<<" csp信奥赛一等奖属于你! ";return0;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/31 17:11:43

PDF-Extract-Kit-1.0详细步骤:/root/PDF-Extract-Kit目录下各脚本执行逻辑解析

PDF-Extract-Kit-1.0详细步骤&#xff1a;/root/PDF-Extract-Kit目录下各脚本执行逻辑解析 PDF-Extract-Kit-1.0是一个专为PDF文档智能解析设计的开源工具集&#xff0c;它不依赖云端服务&#xff0c;所有处理流程都在本地完成。这个版本聚焦于高精度、可复现的文档结构理解能…

作者头像 李华
网站建设 2026/4/1 0:11:10

Qwen3-ForcedAligner-0.6B效果展示:同一音频中英文混读精准断句对比

Qwen3-ForcedAligner-0.6B效果展示&#xff1a;同一音频中英文混读精准断句对比 你有没有遇到过这样的场景&#xff1a;一段教学录音里&#xff0c;老师先用中文讲解概念&#xff0c;突然切换成英文念出专业术语&#xff0c;再回到中文解释——整段语音节奏自然、语义连贯&…

作者头像 李华
网站建设 2026/3/29 6:36:20

RK3588芯片上的函数调用框架实现全攻略

一、RK3588 与函数调用框架简介 RK3588 作为瑞芯微推出的旗舰级 SoC 芯片,自发布以来便在众多领域崭露头角 。它采用 8nm 制程工艺,集成了四核 Cortex-A76 与四核 Cortex-A55 CPU,搭配 Mali-G610 MP4 GPU,并内置独立 NPU 单元,AI 算力高达 6TOPS 。这样强大的硬件配置,使…

作者头像 李华
网站建设 2026/3/31 19:14:25

RMBG-2.0在影视制作中的应用:绿幕后期处理技术

RMBG-2.0在影视制作中的应用&#xff1a;绿幕后期处理技术 1. 影视特效制作的痛点与新解法 绿幕拍摄是影视工业中再常见不过的技术手段&#xff0c;但后期抠像环节却常常让人头疼。记得上个月帮朋友剪一个短视频&#xff0c;他拍了三天绿幕素材&#xff0c;结果在AE里调了一整…

作者头像 李华
网站建设 2026/4/1 16:03:49

7.1 重大突破!权限系统高可用方案原来是这样设计的?

重大突破!权限系统高可用方案原来是这样设计的? 在构建高可用的权限系统时,我们需要考虑多个层面的容错和故障恢复机制。权限系统作为整个业务系统的核心组件,一旦出现故障可能导致整个系统瘫痪,因此设计一个高可用的权限系统至关重要。 1. 权限系统高可用架构设计 权限…

作者头像 李华
网站建设 2026/4/2 20:02:24

DeepAnalyze效果惊艳:电视剧剧本分场文本→角色弧光分析+节奏密度热力图+观众预期管理评估

DeepAnalyze效果惊艳&#xff1a;电视剧剧本分场文本→角色弧光分析节奏密度热力图观众预期管理评估 1. 这不是普通文本分析&#xff0c;是专业编剧的“第二双眼睛” 你有没有试过读完一集电视剧剧本后&#xff0c;心里清楚“这里节奏拖了”“主角转变太突兀”&#xff0c;却说…

作者头像 李华