拓扑排序应用:关卡解锁问题解析
F题闯关游戏题目描述小豫借助AI开发了一款单机闯关游戏游戏共有nnn个关卡。为引导玩家循序渐进体验内容部分关卡设置了前置解锁规则只有通关指定的前置关卡后才能解锁并进入当前关卡。请你根据给出的前置规则判断玩家是否能够解锁并通关全部关卡。输入格式第一行一个正整数ttt1≤t≤101 \leq t \leq 101≤t≤10表示测试用例的组数。对于每组测试用例第一行两个整数n,mn, mn,m1≤n≤10001 \leq n \leq 10001≤n≤10000≤m≤10000 \leq m \leq 10000≤m≤1000分别表示关卡总数和前置规则总数关卡编号从 1 到 n。接下来mmm行每行两个整数uuu和vvv表示关卡uuu是关卡vvv的前置关卡。输出格式对于每组测试用例若无法解锁全部关卡仅单独一行输出No若可以解锁全部关卡第一行输出Yes第二行按顺序输出字典序最小的闯关序列数字之间用空格分隔。示例输入 2 4 3 1 2 1 3 2 4 3 3 1 2 2 3 3 1 输出 Yes 1 2 3 4 No问题分析这是一个典型的拓扑排序问题关卡可以看作图中的节点前置规则u→vu \rightarrow vu→v表示从节点uuu到节点vvv的有向边需要判断这个有向图是否存在环如果存在环则无法完成所有关卡输出No如果没有环则可以拓扑排序输出Yes和序列要求输出字典序最小的拓扑序列算法思路1. 拓扑排序Kahn算法Kahn算法是解决拓扑排序问题的经典算法特别适合需要字典序最小序列的情况#includebits/stdc.husingnamespacestd;voidsolve(){intn,m;cinnm;vectorvectorintgraph(n1);// 邻接表vectorintindegree(n1,0);// 入度数组// 建图for(inti0;im;i){intu,v;cinuv;graph[u].push_back(v);indegree[v];}// 使用最小堆保证字典序最小priority_queueint,vectorint,greaterintpq;// 将所有入度为0的节点加入优先队列for(inti1;in;i){if(indegree[i]0){pq.push(i);}}vectorintresult;// Kahn算法核心while(!pq.empty()){intupq.top();pq.pop();result.push_back(u);// 遍历u的所有邻接节点for(intv:graph[u]){indegree[v]--;if(indegree[v]0){pq.push(v);}}}// 判断是否所有节点都被访问if(result.size()n){coutYesendl;for(inti0;in;i){coutresult[i](in-1?\n: );}}else{coutNoendl;}}intmain(){intt;cint;while(t--){solve();}return0;}2. 算法解释数据结构graph[u]存储从节点 u 出发能到达的所有节点indegree[v]记录节点 v 的入度有多少个前置关卡priority_queue最小堆保证每次取出当前可访问节点中编号最小的算法步骤初始化计算每个节点的入度入队将所有入度为 0 的节点加入最小堆循环处理从堆中取出最小节点 u将 u 加入结果序列遍历 u 的所有后继节点 v将 v 的入度减 1如果 v 的入度变为 0将 v 加入堆中判断结果如果结果序列长度等于 n说明可以完成所有关卡否则说明图中存在环无法完成示例解析示例1可以完成输入 4 3 1 2 1 3 2 4 图结构 1 → 2 → 4 ↘ 3 拓扑序列1 2 3 4字典序最小示例2存在环无法完成输入 3 3 1 2 2 3 3 1 图结构 1 → 2 → 3 → 1形成环 无法拓扑排序输出No关键点总结拓扑排序适用场景有向无环图DAG的线性排序字典序最小使用最小堆优先队列而不是普通队列环检测如果最终结果序列长度小于 n说明存在环多测试用例注意每组测试前要清空数据结构H题和谐模数问题题目描述在魔法森林的深处小明正在进行一项古老的仪式——apple‑coconut‑mango。仪式需要找到一个神秘整数 k使得所有魔法能量值除以 k 后得到相同的余数。给定一个长度为nnn的整数序列a1,a2,…,ana_1, a_2, \dots, a_na1​,a2​,…,an​若存在整数k1k 1k1使得所有aia_iai​对kkk取模的余数相同则称kkk为和谐模数。现在小明需要你帮助他找出所有大于 1 的和谐模数。输入格式第一行包含一个正整数nnn2≤n≤1002 \leq n \leq 1002≤n≤100表示能量值的个数。接下来nnn行每行包含一个整数aia_iai​1≤ai≤1091 \leq a_i \leq 10^91≤ai​≤109表示各魔法的能量值。保证所有能量值互不相同。输出格式一行正整数以升序输出所有符合要求的kkk中间以空格分隔。如果不存在这样的数输出-1。示例输入 3 6 34 38 输出 2 4问题分析这是一个数论问题需要找到所有大于1的整数kkk使得ai mod kr(对所有 i 都相同) a_i \bmod k r \quad (\text{对所有 } i \text{ 都相同})ai​modkr(对所有i都相同)等价于ai−aj≡0(modk)(对所有 i,j) a_i - a_j \equiv 0 \pmod{k} \quad (\text{对所有 } i, j)ai​−aj​≡0(modk)(对所有i,j)也就是说kkk必须能整除所有数对之差的绝对值k∣∣ai−aj∣(对所有 i,j) k \mid |a_i - a_j| \quad (\text{对所有 } i, j)k∣∣ai​−aj​∣(对所有i,j)因此我们需要找到所有大于1的整数kkk使得kkk能整除所有数对差值的最大公约数。算法思路计算差值计算所有数对差值的绝对值求最大公约数计算这些差值的最大公约数ggg特殊情况如果g0g 0g0所有数相等那么任意k1k 1k1都满足条件但题目保证所有能量值互不相同所以这种情况不会出现如果g1g 1g1则不存在大于1的kkk输出-1找出所有因数找出ggg的所有大于1的因数按升序输出代码实现#includebits/stdc.husingnamespacestd;voidsolve(){intn;cinn;vectorinta(n1);for(inti1;in;i)cina[i];intg0;for(inti1;in;i){g__gcd(g,abs(a[i1]-a[i]));//计算所有数对差值的最大公约数}if(g1)cout-1endl;else{for(inti2;is;i){if(g%i0)couti ;// 输出g的所有大于1的因数}coutsendl;}}intmain(){intt1;while(t--)solve();return0;}时间复杂度计算所有数对差值O(n2)O(n^2)O(n2)其中n≤100n \leq 100n≤100完全可行计算最大公约数每次计算O(log⁡M)O(\log M)O(logM)其中MMM是数值范围找出所有因数O(g)O(\sqrt{g})O(g​)其中g≤109g \leq 10^9g≤109总复杂度O(n2log⁡Mg)O(n^2 \log M \sqrt{g})O(n2logMg​)关键点数学转化将问题转化为求所有数对差值的最大公约数的因数边界情况所有数相等时任意k1k 1k1都满足但题目保证数互不相同g1g 1g1时直接输出-1因数查找只需遍历到g\sqrt{g}g​注意i2gi^2 gi2g的情况示例解析示例输入363438计算过程数对差值|6-34| 28|6-38| 32|34-38| 4最大公约数gcd(28, 32, 4) 44的大于1的因数2, 4输出2 4关键点总结数学建模将余数相同问题转化为整除问题最大公约数性质如果kkk整除所有ai−aja_i - a_jai​−aj​则kkk整除这些差值的最大公约数因数查找优化只需遍历到g\sqrt{g}g​即可找到所有因数边界处理注意g1g1g1和所有数相等的情况总结这道H题考察了数论中的同余性质和最大公约数的应用通过巧妙的数学转化将问题简化是典型的竞赛数学题目。

相关新闻

C++17编译期反射实现结构体自动序列化与遍历

C++17编译期反射实现结构体自动序列化与遍历

1. 项目概述:为什么我们需要遍历与序列化结构体?在C项目里,尤其是涉及网络通信、数据持久化或者配置管理的场景,结构体(struct)是我们组织数据的核心单元。你可能经常遇到这样的需求:把一个包含…

2026/7/22 6:37:03阅读更多 →
硬件AI化:从功能增强到自主服务的演进

硬件AI化:从功能增强到自主服务的演进

1. 从遥控器到管家的硬件AI进化史十年前我拆解第一个智能遥控器时,里面还是传统的红外发射电路加按键矩阵。如今再拆开最新款的语音遥控器,发现主控芯片旁多了颗神经处理单元(NPU)——这个变化让我意识到,硬件AI化已经从概念演变成不可逆的产…

2026/7/22 6:35:02阅读更多 →
C++ Boost库完全开发指南:从基础使用到高级编程实践

C++ Boost库完全开发指南:从基础使用到高级编程实践

1. 项目概述:为什么你需要一本关于BOOST的“完全开发指南”?如果你是一名C开发者,无论你是刚入门的新手,还是已经写了几年业务代码的中级工程师,大概率都听说过“BOOST”这个名字。它就像C世界里的一个传奇&#xff0c…

2026/7/22 6:35:02阅读更多 →
跨境电商AI自动化运营解决方案与技术实践

跨境电商AI自动化运营解决方案与技术实践

1. 跨境电商自动化运营的痛点与转型契机 跨境电商行业近年来呈现爆发式增长,但随之而来的运营复杂度也呈指数级上升。我曾为多家跨境电商企业提供架构咨询服务,发现他们普遍面临以下典型困境: 多平台割裂操作 :一家中型卖家通常…

2026/7/22 7:45:17阅读更多 →
安卓模拟器抓包配置与实战技巧

安卓模拟器抓包配置与实战技巧

1. 安卓模拟器抓包的核心价值与应用场景 在移动应用开发和测试过程中,接口数据监控是必不可少的环节。相比真机调试,安卓模拟器提供了更可控的环境和更高的效率。以逍遥模拟器和Android Studio官方模拟器为例,它们能完美模拟各种安卓设备参数…

2026/7/22 7:45:17阅读更多 →
PHP异步邮件队列系统设计与实现

PHP异步邮件队列系统设计与实现

1. 项目背景与核心需求在Web开发中,邮件发送是常见的业务需求,但当需要批量发送大量邮件时,传统的同步处理方式会面临几个关键问题:执行时间过长:假设每封邮件发送耗时2秒,发送1000封邮件就需要约33分钟&am…

2026/7/22 7:45:17阅读更多 →
GMS2 Shader入门:从像素操作到视觉特效的完整指南

GMS2 Shader入门:从像素操作到视觉特效的完整指南

1. 从像素到魔法:为什么要在GMS2里玩Shader? 如果你用GameMaker Studio 2(GMS2)做游戏,画面还停留在精灵(Sprite)的简单移动、缩放和淡入淡出,那你可能只用了引擎一半的潜力。当你想…

2026/7/22 7:45:17阅读更多 →
利用UnrealCV与虚幻引擎批量生成高质量合成视觉数据集实战指南

利用UnrealCV与虚幻引擎批量生成高质量合成视觉数据集实战指南

1. 项目概述:为什么选择UnrealCV来生成图像数据集? 如果你正在做计算机视觉项目,无论是目标检测、语义分割还是深度估计,最头疼的问题之一可能就是数据。公开数据集虽然多,但场景、光照、物体种类往往受限;…

2026/7/22 7:45:17阅读更多 →
Golang整合Redis与MySQL的缓存策略与实践

Golang整合Redis与MySQL的缓存策略与实践

1. Golang中Redis与MySQL的整合实践在Web应用开发中,数据存储与缓存是两大核心组件。MySQL作为关系型数据库的标杆,提供了强大的数据持久化能力;而Redis作为内存数据库,则擅长处理高速读写场景。Golang凭借其出色的并发性能和简洁…

2026/7/22 7:43:16阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 0:53:59阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/22 0:53:59阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/22 0:53:59阅读更多 →
中小企业小程序开发公司怎么选:预算、上手和售后避坑指南

中小企业小程序开发公司怎么选:预算、上手和售后避坑指南

中小企业做小程序,最常见的矛盾是预算有限,但又不希望功能太单薄;没有技术团队,但又希望后续能自己运营;想快速上线,又担心隐性收费和售后失联。选型时如果只看“低价套餐”或“案例数量”,很容…

2026/7/22 0:01:17阅读更多 →
GEO优化如何沉淀长期内容资产?广拓时代谈AI搜索时代的内容ROI

GEO优化如何沉淀长期内容资产?广拓时代谈AI搜索时代的内容ROI

企业做营销,最怕钱花完了,资产没有留下。 效果广告能带来一段时间的曝光,但预算停止后,流量往往也随之停止。短视频内容可能在几天内冲高,也可能很快沉下去。AI搜索时代,企业需要重新思考一个问题&#xff…

2026/7/22 0:01:17阅读更多 →
Agent 终态判定:何时该停止思考、给出最终回复

Agent 终态判定:何时该停止思考、给出最终回复

Agent 终态判定:何时该停止思考、给出最终回复 一、你的 Agent 在"再想想"的循环里绕了 12 轮,用户已经关窗口了 Agent 与人最大的区别是:人知道什么时候该停下来给答案,Agent 会一直"想"下去。你给 Agent 接…

2026/7/22 0:01:17阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/21 22:53:50阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/21 18:53:30阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/21 18:53:30阅读更多 →