当前位置: 首页 > news >正文

USACO历年白银组真题解析 | 2005年2月

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

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

适合人群:

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

附上汇总贴:USACO历年白银组真题解析 | 汇总-CSDN博客


P1673 Part Acquisition

【题目来源】

洛谷:[P1673 USACO05FEB] Part Acquisition S - 洛谷

【题目描述】

奶牛们接到了寻找一种新型挤奶机的任务,为此它们准备依次经过 \(N(1\le N\le 5\times 10^4)\) 颗行星,在行星上进行交易。为了方便,奶牛们已经给可能出现的 \(K(1\le K\le 10^3)\) 种货物进行了由 \(1\)\(K\) 的标号。由于这些行星都不是十分发达。没有流通的货币,所以在每个市场里都只能用固定的一种货物去换取另一种货物。奶牛们带着一种上好的饲料从地球出发,希望在使用的物品的种类数量最少的情况下,最终得到所需要的机器。饲料的标号为 \(1\),所需要的机器的标号为 \(K\)。如果任务无法完成,输出 \(-1\)

【输入】

\(1\) 行是两个数字 \(N\)\(K\)

\(2\)\(N+1\) 行,每行是两个数字 \(A_i\)\(B_i\),表示第 \(i\) 颗行星为得到 \(A_i\) 愿意提供 \(B_i\)

【输出】

输出最少经手物品数。

【输入样例】

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

【输出样例】

4

【解题思路】

2

【算法标签】

《洛谷 P1673 Part Acquisition》 #最短路# #USACO# #2005#

【代码详解】

#include <bits/stdc++.h>
using namespace std;// 定义常量
const int N = 50005;       // 最大节点数
const int M = N * 2;       // 最大边数,无向图需要乘以2int n;                     // 节点总数
int k;                     // 目标节点
int h[N];                  // 邻接表头数组
int e[M];                  // 边数组,存储边的终点
int ne[M];                 // 邻接表next数组
int idx;                   // 边的索引计数器
int dist[N];               // 距离数组,存储从节点1到各节点的最短距离// 添加边的函数
void add(int a, int b)
{e[idx] = b;           // 设置边的终点ne[idx] = h[a];       // 新边指向原链表的头h[a] = idx++;         // 更新链表头,并递增索引
}// 广度优先搜索函数,从节点1开始搜索
void bfs()
{queue<int> q;         // 创建队列用于BFSq.push(1);            // 从节点1开始搜索// 初始化距离数组,将所有距离设为无穷大for (int i = 1; i <= n; i++){dist[i] = 1e9;    // 1e9表示无穷大}dist[1] = 1;          // 节点1到自身的距离为1(这里从1开始计数,不是0)// BFS主循环while (!q.empty()){int t = q.front();  // 取出队首节点q.pop();             // 弹出队首节点// 遍历节点t的所有邻居for (int i = h[t]; i != -1; i = ne[i]){int j = e[i];   // 邻居节点// 如果找到更短的路径if (dist[j] > dist[t] + 1){dist[j] = dist[t] + 1;  // 更新距离q.push(j);              // 将邻居节点加入队列}}}
}int main()
{// 初始化邻接表头数组memset(h, -1, sizeof(h));// 读入节点数和目标节点cin >> n >> k;// 读入n-1条边(因为树有n-1条边)for (int i = 1; i <= n; i++){int u, v;cin >> u >> v;add(u, v);         // 添加边u->v// 注意:这里似乎缺少了add(v, u),应该是无向图的输入}// 执行BFS搜索bfs();// 输出结果if (dist[k] == 1e9)    // 如果目标节点不可达{cout << -1 << endl;}else                   // 如果可达{cout << dist[k] << endl;}return 0;
}

【运行结果】

6 5
1 3
3 2
2 3
3 1
2 5
5 4
4
http://www.jsqmd.com/news/284901/

相关文章:

  • 2026英语雅思培训机构辅导机构怎么选?深度解析行业现状+优质机构口碑榜单与家长择校指南
  • 2026英语雅思培训学校机构辅导机构推荐哪家好?家长择校避坑指南+深度解析
  • 2026年上海全屋定制衣柜公司TOP品牌厂家排行榜:全屋定制行业深度评测与排名、行业问题与选择指南
  • rust maturin 在调用 cargo 时,无法联网拉取 crates.io 索引,因为系统被代理到 127.0.0.1:10809,而本地并没有可用的代理服务
  • JDK21-虚拟线程(实战)
  • AI Agent架构全解析:从感知到行动,小白也能上手的智能体开发实战,错过再等十年!
  • 【AI黑科技】颠覆传统RAG!PageIndex让AI拥有“推理脑“,金融文档分析准确率98.7%!
  • 大模型Agent Skills配置指南:让AI助手从“智障“变“神助攻“,附销售数据分析实战代码
  • 【学术干货免费领】学术会议海报 | 学术会议必备 | 科研展示 | 科研海报 | 国际学术海报 | 会议参会 | 科研成果展示 | 海报展示 | 90+学术Poster模板0元打包下载,速领!
  • 震惊!90%的RAG项目都做错了!RAG不是“加模块“,而是构建完整的AI判断体系
  • 【大模型实战】Agent开发不再迷茫:从推理到运行,构建能“活下去“的系统
  • 【广州南方学院主办 | 斯普林格出版 | 高录用、接收综述文章 | 征稿主题广:人工智能、虚拟现实、艺术、设计类稿件均可接收】第二届人工智能赋能数字创意设计国际学术会议(AIEDCD 2026)
  • 【AI炸裂】大模型Agent学习指南:131篇顶会论文+321个实战案例+代码,小白也能弯道超车!
  • 移动端测试如何学,超详细的APP测试攻略送上
  • 【大数据毕设全套源码+文档】基于Hadoop和Hive的济南旅游景区数据的分析与可视化的设计与实现(丰富项目+远程调试+讲解+定制)
  • 【AI革命】马斯克X算法大揭秘:人工规则已死,RAG接管一切!程序员必学的顶级架构!
  • 【大数据毕设源码分享】django基于大数据的共享单车数据分析与可视化的设计与实现(程序+文档+代码讲解+一条龙定制)
  • TGF-β 信号通路核心干货解析
  • AI Agent‘翻车‘别慌!Skills来救场,小白也能当大神!
  • 腾讯技术面:数据库核心八股终极典藏版
  • 【大数据毕设源码分享】springboot基于Hadoop和Hive的济南旅游景区数据的分析与可视化的设计与实现(程序+文档+代码讲解+一条龙定制)
  • 【保姆级教程】AI Agent编排新姿势:TurnToken机制让大模型协作像搭积木一样简单!
  • 多模态RAG真香!一文带你掌握AI开发的最新技术趋势,小白也能秒懂的编程干货!
  • 【大数据毕设源码分享】基于django的IT行业招聘数据分析与岗位推荐系统的设计与实现(程序+文档+代码讲解+一条龙定制)
  • 【大数据毕设全套源码+文档】基于Django的IT行业招聘数据分析与岗位推荐系统设计与实现(丰富项目+远程调试+讲解+定制)
  • 「干货合集」NF-κB 信号通路:核心机制、功能与科研应用全解析
  • 篡改微信余额技术可刑性研讨 2.0
  • 【大数据毕设源码分享】基于Python的农业大数据管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)
  • [Windows] 下载管理工具 AB Download Manager v1.8.4
  • Web自动化测试框架总结