news 2026/4/16 15:40:38

GESP认证C++编程真题解析 | P10110 [GESP202312 七级] 商品交易

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
GESP认证C++编程真题解析 | P10110 [GESP202312 七级] 商品交易

​欢迎大家订阅我的专栏:算法题解:C++与Python实现!
本专栏旨在帮助大家从基础到进阶 ,逐步提升编程能力,助力信息学竞赛备战!

专栏特色
1.经典算法练习:根据信息学竞赛大纲,精心挑选经典算法题目,提供清晰的代码实现与详细指导,帮助您夯实算法基础。
2.系统化学习路径:按照算法类别和难度分级,从基础到进阶,循序渐进,帮助您全面提升编程能力与算法思维。

适合人群:

  • 准备参加蓝桥杯、GESP、CSP-J、CSP-S等信息学竞赛的学生
  • 希望系统学习C++/Python编程的初学者
  • 想要提升算法与编程能力的编程爱好者

附上汇总帖:GESP认证C++编程真题解析 | 汇总


【题目来源】

洛谷:[P10110 GESP202312 七级] 商品交易 - 洛谷

【题目描述】

市场上共有N NN种商品,编号从0 00N − 1 N-1N1,其中,第i ii种商品价值v i v_ivi元。

现在共有M MM个商人,编号从0 00M − 1 M-1M1。在第j jj个商人这,你可以使用你手上的第x j x_jxj种商品交换商人手上的第y j y_jyj种商品。每个商人都会按照商品价值进行交易,具体来说,如果v x j > v y j v_{x_j}>v_{y_j}vxj>vyj,他将会付给你v x j − v y j v_{x_j}-v_{y_j}vxjvyj元钱;否则,那么你需要付给商人v y j − v x j v_{y_j}-v_{x_j}vyjvxj元钱。除此之外,每次交易商人还会收取1 11元作为手续费,不论交易商品的价值孰高孰低。

你现在拥有商品a aa,并希望通过一些交换来获得商品b bb。请问你至少要花费多少钱?(当然,这个最小花费也可能是负数,这表示你可以在完成目标的同时赚取一些钱。)

【输入】

第一行四个整数N , M , a , b N , M , a , bN,M,a,b,分别表示商品的数量、商人的数量、你持有的商品以及你希望获得的商品。保证0 ≤ a , b < N 0 \le a,b < N0a,b<N,保证a ≠ b a \ne ba=b

第二行N NN个用单个空格隔开的正整数v 0 , v 1 , … , v N − 1 v_0,v_1,…,v_{N-1}v0,v1,,vN1,依次表示每种商品的价值。保证1 ≤ v i ≤ 1 0 9 1≤v_i≤10^91vi109

接下来M MM行,每行两个整数x j , y j x_j,y_jxj,yj,表示在第j jj个商人这,你可以使用第x j x_jxj种商品交换第y j y_jyj种商品。保证0 ≤ x j , y j < N 0≤x_j,y_j<N0xj,yj<N,保证x j ≠ y j x_j≠y_jxj=yj

【输出】

输出一行一个整数,表示最少的花费。特别地,如果无法通过交换换取商品b bb,请输出No solution

【输入样例】

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

【输出样例】

5

【算法标签】

《洛谷 P10110 商品交易》 #广度优先搜索BFS# #最短路# #GESP# #2023#

【代码详解】

#include<bits/stdc++.h>usingnamespacestd;constintN=100005;// 最大节点数constintM=N*2;// 最大边数(无向图×2)intn,m,a,b;// n: 节点数, m: 边数, a: 起点, b: 终点intv[N];// 每个节点的值inth[N],e[M],ne[M],w[M],idx;// 邻接表intdist[N];// 最短距离boolst[N];// 节点是否在队列中// 添加有向边voidadd(inta,intb,intc){e[idx]=b;// 边的终点w[idx]=c;// 边的权重ne[idx]=h[a];// 指向a的下一条边h[a]=idx++;// 更新a的第一条边}// SPFA算法求最短路voidspfa(){// 初始化距离为无穷大memset(dist,0x3f,sizeof(dist));dist[a]=0;// 起点距离为0queue<int>q;// SPFA队列q.push(a);// 起点入队st[a]=true;// 标记起点在队列中while(!q.empty()){intt=q.front();// 取出队首节点q.pop();// cout << "t " << t << endl; // 调试输出st[t]=false;// 标记t不在队列中// 遍历t的所有邻接边for(inti=h[t];i!=-1;i=ne[i]){intj=e[i];// 邻接节点// 松弛操作if(dist[j]>dist[t]+w[i]){dist[j]=dist[t]+w[i]+1;// 更新距离if(!st[j])// 如果j不在队列中{q.push(j);// j入队st[j]=true;// 标记j在队列中}}}}// 调试输出距离数组// for (int i=0; i<n; i++)// cout << dist[i] << " ";// cout << endl;}intmain(){// 初始化邻接表memset(h,-1,sizeof(h));// 输入节点数、边数、起点、终点cin>>n>>m>>a>>b;// 输入每个节点的值for(inti=0;i<n;i++){cin>>v[i];}// 输入边并建图while(m--){intx,y;cin>>x>>y;// 添加有向边,权重为v[y] - v[x]add(x,y,v[y]-v[x]);}// 运行SPFA算法spfa();// 输出结果if(dist[b]==0x3f3f3f3f)// 如果终点不可达{puts("No solution");}else{cout<<dist[b]<<endl;// 输出最短距离}return0;}

【运行结果】

3 5 0 2 1 2 4 1 0 2 0 0 1 2 1 1 2 5
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 14:00:31

anything-llm + GPU算力,释放AI最大潜能

Anything-LLM 与 GPU 算力的深度融合&#xff1a;构建安全高效的私有化 AI 助手 在企业知识管理日益复杂、数据隐私要求不断提升的今天&#xff0c;如何让大语言模型真正“为我所用”&#xff0c;而不是依赖云端 API 被动响应&#xff1f;一个越来越清晰的答案正在浮现&#xf…

作者头像 李华
网站建设 2026/4/15 20:33:08

STM32CubeMX下载教程:Linux平台环境搭建完整示例

在 Linux 上玩转 STM32CubeMX&#xff1a;从零搭建嵌入式开发前端 你有没有遇到过这样的场景&#xff1f;团队统一使用 Ubuntu 进行嵌入式开发&#xff0c;结果一到配置 STM32 引脚和时钟树的时候&#xff0c;有人还得切回 Windows 虚拟机才能打开 CubeMX&#xff1f;或者 CI/…

作者头像 李华
网站建设 2026/4/16 0:34:18

网络安全工程师需要具备的五个重要技能

网络安全工程师需要具备的五个重要技能 大数据时代&#xff0c;网络安全非常重要&#xff0c;越来越多的企业也越来越重视网络安全&#xff0c;而网络安全工程师也成为现在需求量比较大的职业&#xff0c;成都也有很多专门做网络安全培训的学校&#xff0c;为这个行业的发展输…

作者头像 李华
网站建设 2026/4/15 18:07:08

支持多模型接入的LLM管理平台:anything-llm实战分享

支持多模型接入的LLM管理平台&#xff1a;anything-llm实战分享 在AI应用快速落地的今天&#xff0c;越来越多团队开始尝试将大语言模型&#xff08;LLM&#xff09;引入日常办公、知识管理和客户服务中。但现实往往比想象复杂得多——你可能希望用GPT-4来生成高质量回答&#…

作者头像 李华
网站建设 2026/4/16 12:22:31

手把手教你实现Open-AutoGLM,快速掌握AI自动化推理核心技能

第一章&#xff1a;Open-AutoGLM实现Open-AutoGLM 是一个面向自动化自然语言任务的开源框架&#xff0c;基于 GLM 架构构建&#xff0c;支持指令理解、多轮对话与任务编排。其实现核心在于将用户输入的任务请求自动解析为可执行的工作流&#xff0c;并调度相应的模型组件完成推…

作者头像 李华
网站建设 2026/4/16 12:28:28

Open-AutoGLM 2.0怎么下载?揭秘官方渠道与避坑指南

第一章&#xff1a;Open-AutoGLM 2.0怎么下载 获取 Open-AutoGLM 2.0 是使用该开源框架进行自动化大语言模型调优的第一步。该项目托管于 GitHub&#xff0c;支持通过 Git 工具或直接下载发布版本的方式获取源码。 访问官方代码仓库 Open-AutoGLM 2.0 的源代码公开在 GitHub 平…

作者头像 李华