news 2026/5/30 4:24:35

2025年3月GESP真题及题解(C++八级): 上学

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
2025年3月GESP真题及题解(C++八级): 上学

2025年3月GESP真题及题解(C++八级): 上学

题目描述

C 城可以视为由n nn个结点与m mm条边组成的无向图。 这些结点依次以1 , 2 , … , n 1, 2, \ldots, n1,2,,n标号,边依次以1 ≤ i ≤ m 1 \leq i \leq m1im连接边号为u i u_iuiv i v_ivi的结点,长度为l i l_ili米。

小 A 的学校坐落在 C 城的编号为s ss的结点。小 A 的同学们共有q qq位,他们想在保证不迟到的前提下,每天尽可能晚地出门上学。但同学们并不会计算从家需要多久才能到学校,于是找到了聪明的小 A。第i ii位同学 (1 ≤ i ≤ q 1 \leq i \leq q1iq) 告诉小 A,他的家位置于编号为h i h_ihi的结点,并且他每秒钟能行走 1 米。请你帮小 A 计算,每位同学从家出发需要多少秒才能到达学校呢?

输入格式

第一行,四个正整数n , m , s , q n, m, s, qn,m,s,q,分别表示 C 城的结点数与边数,学校所在的结点编号,以及小 A 同学们的数量。

接下来m mm行,每行三个正整数u i , v i , l i u_i, v_i, l_iui,vi,li,表示 C 城中的一条无向边。

接下来q qq行,每行一个正整数h i h_ihi,表示一位同学的情况。

输出格式

q qq行,对于每位同学,输出一个整数,表示从家出发到学校的最短时间。

输入输出样例 1
输入 1
5 5 3 3 1 2 3 2 3 2 3 4 1 4 5 3 1 4 2 5 1 4
输出 1
4 3 1
说明/提示

对于20 % 20\%20%的测试点,保证q = 1 q = 1q=1

对于另外20 % 20\%20%的测试点,保证1 ≤ n ≤ 500 1 \leq n \leq 5001n5001 ≤ m ≤ 500 1 \leq m \leq 5001m500

对于所有测试点,保证1 ≤ n ≤ 2 × 10 5 1 \leq n \leq 2 \times 10^51n2×1051 ≤ m ≤ 2 × 10 5 1 \leq m \leq 2 \times 10^51m2×1051 ≤ q ≤ 2 × 10 5 1 \leq q \leq 2 \times 10^51q2×1051 ≤ u i , v i , s , h i ≤ n 1 \leq u_i, v_i, s, h_i \leq n1ui,vi,s,hin1 ≤ l i ≤ 10 6 1 \leq l_i \leq 10^61li106

题目分析

本题要求计算从学校结点s到每个同学家结点h_i的最短路径长度(单位:米)。由于行走速度为1米/秒,所以最短路径长度即为所需时间(秒)。这是一个典型的单源最短路径问题,给定无向图、正权边,需要高效处理最多2e5个结点和边的规模。

算法思路
  1. 建模:将城市抽象为无向图,结点数n,边数m,每条边有长度l_i(权值)。
  2. 最短路径计算:使用Dijkstra 算法(堆优化版本),从源点s开始计算到所有结点的最短距离。复杂度为 O((n+m) log n),可以处理2e5的数据规模。
  3. 查询处理:预处理出所有最短距离后,对每个查询h_i直接输出dist[h_i]
注意事项
  • 边权最大1e6,边数最多2e5,总距离可能超过int范围,需使用long long
  • 图可能不连通,但题目未明确说明。为安全起见,初始化距离为极大值(如1e18),不可达时输出该值(但根据题意通常连通)。

代码实现

#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;constintMAXN=200010;// 最大结点数constll INF=1e18;// 表示无穷大的距离intn,m,s,q;// 结点数、边数、学校结点、查询数vector<pair<int,ll>>graph[MAXN];// 邻接表ll dist[MAXN];// 从学校到各点的最短距离// Dijkstra 算法,计算从起点 start 到所有点的最短距离voiddijkstra(intstart){// 初始化所有距离为无穷大for(inti=1;i<=n;++i)dist[i]=INF;dist[start]=0;// 小顶优先队列,存储 (当前距离, 结点编号)priority_queue<pair<ll,int>,vector<pair<ll,int>>,greater<pair<ll,int>>>pq;pq.push({0,start});while(!pq.empty()){// 取出当前距离最小的结点ll d=pq.top().first;intu=pq.top().second;pq.pop();// 如果这个距离已经大于记录的距离,说明是旧数据,跳过if(d>dist[u])continue;// 遍历所有邻接点for(auto&edge:graph[u]){intv=edge.first;ll w=edge.second;// 如果通过 u 到 v 的距离更短,则更新if(dist[u]+w<dist[v]){dist[v]=dist[u]+w;pq.push({dist[v],v});}}}}intmain(){// 读入基本数据scanf("%d %d %d %d",&n,&m,&s,&q);// 读入边信息,构建无向图for(inti=0;i<m;++i){intu,v;ll l;scanf("%d %d %lld",&u,&v,&l);graph[u].push_back({v,l});graph[v].push_back({u,l});// 无向边,双向添加}// 运行 Dijkstra,计算从学校到所有点的最短距离dijkstra(s);// 处理每个查询,直接输出最短距离(即时间)while(q--){inth;scanf("%d",&h);printf("%lld\n",dist[h]);}return0;}

功能分析

  1. 图构建:使用邻接表存储无向图,每个边记录终点和权值。
  2. 最短路径计算
    • 初始化距离数组dist,源点s距离为0。
    • 使用优先队列(最小堆)维护当前未确定最短距离的结点,每次取出距离最小的结点进行松弛操作。
    • 对每条边进行松弛,若找到更短路径则更新距离并加入队列。
  3. 查询响应:由于已预处理所有最短距离,每个查询只需 O(1) 时间输出结果。
  4. 时间复杂度:Dijkstra 算法 O((n+m) log n)。
  5. 空间复杂度:O(n+m),用于存储图和距离数组。

样例验证

输入:

5 5 3 3 1 2 3 2 3 2 3 4 1 4 5 3 1 4 2 5 1 4

计算过程:

  • 从结点3出发,最短距离:
    • dist[3]=0
    • dist[2]=2
    • dist[4]=1
    • dist[1]=min(3→2→1=5, 3→4→1=3)=3
    • dist[5]=min(3→4→5=4, 其他路径更长)=4
  • 查询输出:
    • h=5 → 4
    • h=1 → 3
    • h=4 → 1

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

#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/5/29 1:37:31

SGLang动态批处理:请求合并优化实战指南

SGLang动态批处理&#xff1a;请求合并优化实战指南 1. 引言 1.1 业务场景描述 在大模型推理服务部署过程中&#xff0c;随着用户请求数量的快速增长&#xff0c;系统吞吐量和响应延迟成为关键瓶颈。尤其是在多轮对话、任务规划、结构化数据生成等复杂场景下&#xff0c;传统…

作者头像 李华
网站建设 2026/5/28 14:45:05

PaddleOCR-VL与文心4.5对比:云端GPU双模型测试,1小时出报告

PaddleOCR-VL与文心4.5对比&#xff1a;云端GPU双模型测试&#xff0c;1小时出报告 你是不是也遇到过这样的场景&#xff1f;技术总监突然甩来一个任务&#xff1a;“我们想用OCR做文档解析&#xff0c;百度的PaddleOCR-VL和文心4.5哪个更强&#xff1f;明天给我一份对比报告。…

作者头像 李华
网站建设 2026/5/29 22:42:40

Z-Image-Turbo性能优化:提升推理速度的5个关键设置

Z-Image-Turbo性能优化&#xff1a;提升推理速度的5个关键设置 1. 背景与核心价值 随着文生图大模型在内容创作、设计辅助和AI艺术等领域的广泛应用&#xff0c;推理效率成为决定用户体验的关键指标。Z-Image-Turbo作为阿里达摩院基于DiT&#xff08;Diffusion Transformer&a…

作者头像 李华
网站建设 2026/5/28 14:45:11

开箱即用!DeepSeek-R1-Distill-Qwen-1.5B在树莓派上的实测体验

开箱即用&#xff01;DeepSeek-R1-Distill-Qwen-1.5B在树莓派上的实测体验 1. 引言&#xff1a;轻量级大模型的边缘部署新选择 随着大语言模型&#xff08;LLM&#xff09;能力的持续提升&#xff0c;如何在资源受限的设备上实现高效推理成为工程落地的关键挑战。传统千亿参数…

作者头像 李华
网站建设 2026/5/23 9:52:08

Qwen3-VL农业病虫害识别:1块钱快速测试田间照片

Qwen3-VL农业病虫害识别&#xff1a;1块钱快速测试田间照片 你是不是也遇到过这样的情况&#xff1f;农技站同事拿着手机拍的几张玉米叶照片&#xff0c;问你这是不是褐斑病。你看着那模糊的边缘和零星黄斑&#xff0c;心里没底——这到底是缺肥、晒伤&#xff0c;还是真菌感染…

作者头像 李华
网站建设 2026/5/29 19:11:40

GLM-TTS实战教程:短视频配音自动化流水线搭建

GLM-TTS实战教程&#xff1a;短视频配音自动化流水线搭建 1. 引言 随着短视频内容的爆发式增长&#xff0c;高效、个性化的语音合成需求日益迫切。传统配音方式依赖专业录音人员和后期制作&#xff0c;成本高、周期长&#xff0c;难以满足大规模内容生产的需求。GLM-TTS作为智…

作者头像 李华