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

题解:AcWing 1164 加工零件

【题目来源】

AcWing:1164. 加工零件 - AcWing题库

【题目描述】

凯凯的工厂正在有条不紊地生产一种神奇的零件,神奇的零件的生产过程自然也很神奇。工厂里有 \(n\) 位工人,工人们从 \(1∼n\) 编号。某些工人之间存在双向的零件传送带。保证每两名工人之间最多只存在一条传送带。

如果 \(x\) 号工人想生产一个被加工到第 \(L(L>1)\) 阶段的零件,则所有\(x\) 号工人有传送带直接相连的工人,都需要生产一个被加工到第 \(L−1\) 阶段的零件(但 \(x\) 号工人自己无需生产第 \(L−1\) 阶段的零件)。

如果 \(x\) 号工人想生产一个被加工到第 \(1\) 阶段的零件,则所有\(x\) 号工人有传送带直接相连的工人,都需要为 \(x\) 号工人提供一个原材料。

轩轩是 \(1\) 号工人。现在给出 \(q\) 张工单,第 \(i\) 张工单表示编号为 \(a_i\) 的工人想生产一个第 \(L_i\) 阶段的零件。轩轩想知道对于每张工单,他是否需要给别人提供原材料。他知道聪明的你一定可以帮他计算出来!

【输入】

第一行三个正整数 \(n\)\(m\)\(q\),分别表示工人的数目、传送带的数目和工单的数目。

接下来 \(m\) 行,每行两个正整数 \(u\)\(v\),表示编号为 \(u\)\(v\) 的工人之间存在一条零件传输带。保证 \(u\neq v\)

接下来 \(q\) 行,每行两个正整数 \(a\)\(L\),表示编号为 \(a\) 的工人想生产一个第 \(L\) 阶段的零件。

【输出】

\(q\) 行,每行一个字符串 Yes 或者 No。如果按照第 \(i\) 张工单生产,需要编号为 \(1\) 的轩轩提供原材料,则在第 \(i\) 行输出 Yes;否则在第 \(i\) 行输出 No。注意输出不含引号。

【输入样例】

3 2 6
1 2
2 3
1 1
2 1
3 1
1 2
2 2
3 2

【输出样例】

No
Yes
No
Yes
No
Yes

【解题思路】

image

image

image

image

【算法标签】

《AcWing 1164 加工零件》 #最短路# #BFS# #拆点#

【代码详解】

#include <bits/stdc++.h>
using namespace std;typedef pair<int, int> PII; // 定义 pair 类型,存储节点编号和类型
const int N = 1e5 + 10, M = N * 2, INF = 1e9 + 1000; // 定义常量
vector<int> h[N]; // 邻接表存储图
queue<PII> que; // BFS 使用的队列,存储节点编号和类型
int n, m, q; // n 是节点数量,m 是边的数量,q 是查询数量
int dist[N][2]; // dist[i][0] 表示从节点 1 到节点 i 的偶数步数距离,dist[i][1] 表示奇数步数距离// BFS 函数,计算从节点 1 到其他节点的偶数步数和奇数步数距离
void bfs() {// 初始化距离数组为 INFmemset(dist, 0x3f, sizeof(dist));dist[1][0] = 0; // 起点到自身的偶数步数距离为 0que.push({1, 0}); // 将起点加入队列,类型为 0(偶数步数)while (!que.empty()) { // 当队列不为空时PII nd = que.front(); // 取出队首节点que.pop(); // 弹出队首节点// 遍历当前节点的所有邻接节点for (int i = 0; i < h[nd.first].size(); i++) {int j = h[nd.first][i]; // 邻接节点 jint type = nd.second ^ 1; // 切换类型(偶数步数 -> 奇数步数,奇数步数 -> 偶数步数)// 如果当前路径可以更新节点 j 的距离if (dist[j][type] > dist[nd.first][nd.second] + 1) {dist[j][type] = dist[nd.first][nd.second] + 1; // 更新距离que.push({j, type}); // 将节点 j 加入队列}}}
}int main() {cin >> n >> m >> q; // 读取节点数量 n、边的数量 m 和查询数量 q// 读取边的信息并构建图while (m--) {int a, b;cin >> a >> b; // 读取边的两个端点h[a].push_back(b); // 添加边 a -> bh[b].push_back(a); // 添加边 b -> a}bfs(); // 调用 BFS 函数计算距离// 处理查询while (q--) {int a, L;cin >> a >> L; // 读取查询的节点 a 和步数 L// 判断是否满足条件if (a == 1 && h[1].size() == 0) // 如果查询的是起点且起点没有邻接节点puts("No");else if (L >= dist[a][L & 1]) // 如果步数 L 大于等于节点 a 的对应类型距离puts("Yes");else // 否则puts("No");}return 0;
}

【运行结果】

3 2 6
1 2
2 3
1 1
No
2 1
Yes
3 1
No
1 2
Yes
2 2
No
3 2
Yes
http://www.jsqmd.com/news/394545/

相关文章:

  • 国内开源大模型竞争加剧,技术迭代与应用落地成焦点
  • 2026隧道/机房/装饰钢板厂家推荐:无锡华龙机房新型装饰材料有限公司,多品类钢板供应 - 品牌推荐官
  • 【Redis】Ubuntu22.04安装redis++ - 实践
  • 题解:AcWing 848 有向图的拓扑序列
  • 2026盘式过滤机厂家推荐:连云港格律诗环保设备,陶瓷/真空过滤机全系供应,技术领先 - 品牌推荐官
  • 题解:AcWing 847 图中点的层次
  • 工业成品多维检测模型 - 指南
  • 2026年铝单板生产厂家实力推荐:金盛铝业有限公司,抗菌/超耐候/仿石材/双曲铝单板全系供应 - 品牌推荐官
  • 武商一卡通如何快速回收?简单安全的平台与流程推荐 - 团团收购物卡回收
  • Sophos Firewall (SFOS) v21.5 MR2 发布 - 下一代防火墙
  • 2026年防腐涂料推荐:鲸鱼防腐涂料,环氧锌黄/煤沥青/云铁/富锌等全系产品供应 - 品牌推荐官
  • 【CTFshow-pwn系列】03_栈溢出【pwn 049】详解:静态编译下的 mprotect 权限修改技巧
  • 2026年车丝机设备厂家推荐:航城科技有限公司,PVC/PE/钢管数控车丝机全系供应 - 品牌推荐官
  • 把坑都踩完了,AI论文写作软件 千笔·专业论文写作工具 VS 云笔AI
  • 2026年光伏系统全流程服务商推荐:浙江兆基电力科技,组件安装/阵列排布/电站施工一站式服务 - 品牌推荐官
  • 2026年流量计生产厂家推荐:江苏雷泰自动化仪表,气体涡轮/超声波/电磁/涡街流量计全品类供应 - 品牌推荐官
  • 2026冲刺用!顶流之选的AI论文软件 —— 千笔ai写作
  • 2026年水肥一体机设备厂家推荐:山东淋垚智慧农业科技,智能/移动/精准施肥设备全系供应 - 品牌推荐官
  • 2026芯片产品公司推荐:深圳市众芯微电子有限公司,a15/CPU/AI/基因芯片等全品类供应 - 品牌推荐官
  • 全网最全 8个降AIGC软件测评:本科生降AI率必备工具推荐
  • 2026年电加热/树脂/衬四氟/外盘管/化工反应釜厂家推荐:无锡鑫泓源石化装备全系供应 - 品牌推荐官
  • 2026年海外移民申请服务推荐:上海加鼎因私出入境,涵盖永居/护照/签证/养老移民全流程 - 品牌推荐官
  • Saliency-Aware Multi-Route Thinking Revisiting Vision-Language Reasoning
  • 2026年镀锌管厂家推荐:天津市茂金金属制品有限公司,热镀锌/焊接/大口径/薄壁等全系镀锌管供应 - 品牌推荐官
  • 信息学奥赛培训教程(配套习题)
  • ReMoRa Multimodal Large Language Model based on Refined Motion Representation for Long-Video Underst
  • 2026年抗氧化剂特丁基对苯二酚厂家推荐:山东百事益食品科技,TBHQ全系产品供应 - 品牌推荐官
  • 2026年陶土板定制新选择:口碑品牌引领行业新风尚,陶百叶/陶棍/陶板/陶砖/陶土板,陶土板施工工艺推荐排行榜 - 品牌推荐师
  • 2026年钢板开平线厂家实力推荐:淄博瑞麟机械,伺服/全自动/不锈钢开平线全系解决方案 - 品牌推荐官
  • 反击式破碎机技术新趋势:盘点用户信赖的优质厂商,双辊破碎机/锤式破碎机/颚式破碎机,反击式破碎机实力厂家有哪些 - 品牌推荐师