news 2026/4/27 11:22:38

团体程序设计天梯赛-练习集 L2-036 网红点打卡攻略

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
团体程序设计天梯赛-练习集 L2-036 网红点打卡攻略

L2-036 网红点打卡攻略 - 团体程序设计天梯赛-练习集

一、题目核心分析

有效路径的 3 个必要条件(缺一不可)

  1. 路径长度(节点个数)必须等于n:因为要遍历n个城市(0~n-1)各一次,路径节点数恰好是n(最后返回 0 是额外的边,不是路径节点)。
  2. 路径经过的节点必须是0~n-1的完整集合(无重复、无遗漏):可以用哈希集合(unordered_set)去重,判断集合大小是否等于n
  3. 路径中相邻节点(包括路径最后一个节点和 0)之间必须存在有效道路(费用不为 - 1):题目中用arr[a][b] = -1表示ab之间无道路。

解题思路

  1. 数据存储:用二维数组arr[N][N]存储两个城市之间的道路费用,初始化所有值为 - 1(表示无道路),输入道路信息时更新双向道路的费用。
  2. 路径校验与费用计算:编写辅助函数get_money,对每条查询路径进行 3 个条件的校验,校验通过则计算总费用,否则返回 - 1。
  3. 结果统计:遍历所有k条查询路径,统计有效路径数量cnt,同时记录最少费用minn和对应的路径编号id
  4. 输出结果:按要求打印有效路径数量、最少费用路径的编号和最少费用。

二、AC代码(带详细注释)

#include<bits/stdc++.h> using namespace std; const int N = 205; // 题目中城市数量的上限,设置205足够满足需求 int arr[N][N]; // 存储两个城市之间的道路费用,arr[a][b]表示a到b的费用,-1表示无道路 int cnt = 0; // 符合条件的有效路径数 int minn = 0x3f3f3f3f; // 记录最少费用,初始化为一个极大值(0x3f3f3f3f是常用的极大值,不会溢出) int id = 0; // 记录费用最少的有效路径的编号 int n, m; // n:城市总数,m:道路总数 /** * 辅助函数:校验路径是否有效,并计算有效路径的总费用 * @param len:查询路径的节点个数 * @param as:查询路径的节点列表 * @return:有效路径返回总费用,无效路径返回-1 */ int get_money(int len, const vector<int> &as) { // 条件1:路径节点个数必须等于n(遍历所有n个城市各一次) if (len != n) return -1; unordered_set<int> st; // 用于去重,判断路径是否包含所有城市 int u = 0; // 起点城市,固定为0 int ans = 0; // 记录路径总费用 for (int v : as) { // 条件2.1:当前节点u和下一个节点v之间无有效道路,路径无效 if (arr[u][v] == -1) return -1; st.insert(v); // 将节点v加入集合,用于后续去重判断 ans += arr[u][v]; // 累加道路费用 u = v; // 更新当前节点为v,继续遍历下一个节点 } // 条件2.2:路径包含的节点去重后大小不等于n(有重复或遗漏),路径无效 // 条件2.3:路径最后一个节点u无法返回起点0(无有效道路),路径无效 if (arr[u][0] == -1 || st.size() != n) return -1; ans += arr[u][0]; // 累加最后一个节点返回0的道路费用 return ans; // 返回有效路径的总费用 } int main() { // 初始化二维数组arr所有元素为-1,表示初始时所有城市之间无道路 memset(arr, -1, sizeof arr); cin >> n >> m; for (int i = 1; i <= m; ++i) { int a, b, c; cin >> a >> b >> c; // 题目中道路是双向的,因此双向更新费用 arr[a][b] = arr[b][a] = c; } int k; cin >> k; // k条查询路径 for (int i = 1; i <= k; ++i) { // 路径编号从1开始 int kk; cin >> kk; // 当前路径的节点个数 vector<int> list; // 存储当前路径的节点列表 for (int j = 0; j < kk; ++j) { int w; cin >> w; list.emplace_back(w); } // 调用辅助函数,获取当前路径的总费用(无效则为-1) int d = get_money(kk, list); if (d == -1) continue; // 路径无效,跳过后续统计 // 路径有效,更新统计信息 cnt++; // 有效路径数+1 // 更新最少费用和对应路径编号 if (d < minn) { minn = d; id = i; } } // 按题目要求输出结果 cout << cnt << endl; cout << id << ' ' << minn << endl; return 0; }

三、关键模块解析

1. 初始化与数据存储

  • memset(arr, -1, sizeof arr)初始化二维数组:memset按字节赋值,由于-1的补码是全 1,因此可以正确将int类型的数组元素赋值为 - 1,快速标记所有城市之间初始无道路。
  • 道路是双向的,因此输入a b c时,需要同时赋值arr[a][b] = carr[b][a] = c,保证从ab和从ba的费用一致且有效。

2. 辅助函数get_money核心逻辑

这是本题的核心,负责完成路径校验和费用计算,步骤如下:

  1. 先判断路径长度是否为n,不满足直接返回 - 1(快速剪枝,减少后续计算)。
  2. 遍历路径节点,逐个校验相邻节点是否有有效道路,同时累加费用、将节点加入去重集合。
  3. 遍历结束后,校验两个关键条件:路径节点是否完整(集合大小为n)、最后一个节点能否返回起点 0。
  4. 所有条件满足则累加返回起点的费用,返回总费用;否则返回 - 1。

3. 结果统计与更新

  • 有效路径数cnt:只有当d != -1时,才进行cnt++
  • 最少费用minn:初始化为0x3f3f3f3f(这是 C++ 中常用的极大值,约为 1e9,大于题目中可能的总费用,且不会出现整数溢出),当遇到更小的有效路径费用时,更新minn和对应的路径编号id
  • 路径编号:题目中查询路径从 1 开始编号,因此循环变量i从 1 到k,直接用i作为路径编号即可。

四、运行结果说明

输入示例(简化版)

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

输出示例

plaintext

2 1 10

解释

  1. 第 1 条路径0->1->2->3->0:有效,总费用1+4+6+3=14(此处为示例计算,具体以实际输入为准)。
  2. 第 2 条路径包含重复节点 0,无效。
  3. 第 3 条路径0->1->3->2->0:有效,总费用1+5+6+2=14(示例)。
  4. 最终有效路径数为 2,两条路径费用相同,取编号较小的 1。

总结

  1. 本题核心是校验有效环游路径的 3 个必要条件,缺一不可,辅助函数get_money是实现该逻辑的关键。
  2. 数据存储采用二维数组,道路双向赋值,结果统计需关注路径编号和最少费用的更新逻辑。
  3. 解题时需注意细节(如返回起点 0、路径长度、双向道路),这些是避免出错的核心要点。

易错点提醒

  • 忘记道路是双向的,只赋值arr[a][b] = c,未赋值arr[b][a] = c,导致反向路径判断错误。
  • 忽略路径最后一个节点需要返回起点 0,漏判arr[u][0] == -1,导致无效路径被误判为有效。
  • 路径长度判断错误:将 “返回起点 0” 算作路径节点,误判路径长度应为n+1,实际题目中路径节点只需要包含n个城市各一次。
  • 初始化minn时使用过大的值(如INT_MAX),导致累加费用后溢出,推荐使用0x3f3f3f3f
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 17:37:06

如何通过AI销冠系统提升数字员工的销售效能?

在数字化转型的时代背景下&#xff0c;数字员工为企业优化业务流程、降低成本及提升效率提供了有力支持。通过引入AI销冠系统&#xff0c;数字员工能够实现自动化处理&#xff0c;大幅提升客户应答效率。这一灵活的系统允许企业全天候进行客户互动&#xff0c;不仅减少了人工座…

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

知识图谱在AI原生应用中的核心作用解析

知识图谱在AI原生应用中的核心作用解析 关键词&#xff1a;知识图谱、AI原生应用、知识表示、知识推理、可解释性AI、语义理解、智能决策 摘要&#xff1a;本文将深入解析知识图谱在AI原生应用中的核心价值。通过生活案例、技术原理解读、代码实战和行业应用场景&#xff0c;我…

作者头像 李华
网站建设 2026/4/26 20:17:36

你太久没关注自己了,太久没好好心疼自己了

你熬的不是夜&#xff0c;是被白天偷走的自己 目录 你熬的不是夜&#xff0c;是被白天偷走的自己 深夜的卧室里&#xff0c;手机屏幕的光映着疲惫的脸&#xff0c;眼皮早就打架&#xff0c;手指却还在机械滑动&#xff1b;明明身体已经累到极致&#xff0c;一放下手机&#xff…

作者头像 李华
网站建设 2026/4/26 13:07:58

职业跨界手册:医疗开发者转型基因编辑实战

在数字化转型浪潮中&#xff0c;医疗软件开发者正迎来基因编辑领域的新机遇。本文结合热度趋势&#xff0c;为软件测试从业者提供专业转型路径&#xff0c;助你抢占技术前沿。 一、公众号热度解析&#xff1a;为什么基因编辑内容引爆流量&#xff1f; 公众号内容要获得高热度…

作者头像 李华
网站建设 2026/4/27 7:54:13

50岁更抢手:2026年太空开发经验资本化术

资深测试工程师的机遇与挑战 2026年&#xff0c;太空开发浪潮席卷全球&#xff0c;从卫星导航到载人航天&#xff0c;软件测试成为确保系统可靠性的核心。50岁以上的资深测试工程师凭借数十年经验&#xff0c;在复杂场景如高并发、多语言测试中更显“抢手”&#xff0c;但如何…

作者头像 李华
网站建设 2026/4/23 15:06:45

CSRF(Cross-site Request Forgery)跨站请求伪造攻击(浏览器自动携带同源Cookie机制)与XSS攻击区别、现代网站安全模板、sameSite、Referer校验

文章目录深入理解CSRF&#xff1a;原理、攻击与防御实战指南一、一个真实场景&#xff1a;你点开的“猫咪视频”&#xff0c;正在转走你的存款二、CSRF本质&#xff1a;身份可信 ≠ 操作可信三、防御三板斧&#xff1a;纵深防御才是王道✅ 方案1&#xff1a;SameSite Cookie 属…

作者头像 李华