Luogu P3547 [POI2013] CEN-Price List 题解 BFS 广度优先搜索

news/2024/7/15 18:38:51 标签: list, 宽度优先, 数据结构, 算法, 图论

题目链接:Luogu P3547 [POI2013] CEN-Price List
题目描述:

给定一张边权均为a的无向图,现在将所有两点之间最短路为2a的点之间增加一条长度为b的无向边,问到给定点s的单元最短路。

题解:

对于一个点us的最短路只有三种情况:

  1. 经过的边边权均为a
  2. 经过的边边权均为b
  3. 经过的边边权ab均有。

我们只需要求出上面三种情况的最短路取最小值即可。
对于情况一只需要进行一次BFS即可求出。
对于情况二我们同样可以通过一次BFS求出:

  1. 我们首先建立两张与原图一样的图,我们将两张图的边权全部记作1这样只需在最后的时候乘以a或者b即可,将这两张图记为gnewG
  2. 对于本轮BFS的结点u,标记其在g中的相邻结点v已访问;
  3. 通过g遍历与u相邻的结点v,通过newG遍历与v相邻的结点w;若w已经被标记,则说明uw之间的最短路为1,此时两者之间不存在边长为b的边,不能更新dis;若w并没有被标记,说明uw之间的最短路距离为2,此时存在边长为b的边,所以进行更新dis[w] = dis[u] + 1,并将w入队,删除vw的边;
  4. 通过g遍历与u相邻的结点v,标记其为未访问。

上述的过程需要删除vw的边,可以通过前向星实现(建立双向链表)。该算法与三元环计数类似,时间复杂度为 O ( ( n + m ) m ) O((n + m) \sqrt m) O((n+m)list-t vlist-t2">list-r">list" style="height: 0.8003em;">m list-s">​list-r">list" style="height: 0.2397em;">)。能够删除的原因是:根据BFS可以知道先遍历的点的dis一定小于后遍历的点的距离,如果之前通过vw的这条边更新过,后续通过这条边的距离一定会更大,因此不需要重复遍历。
对于情况三我们可以发现最多只会经过一条边权为a的边。这是因为,如果我们经过了边权为b的边,那么说明b<2a否则不会更优,那么既然这样,每有两条边权为a的边,则可以进行走一次边权为b的边进行优化,最会只可能剩下一条或者零条边权为a的边,如果将原图的边权改为1求得一次的单元最短路的结果记为dis[u]us的最短路),则情况三为: ⌊ d i s [ u ] 2 ⌋ ∗ b + d i s [ u ]   m o d   2 ∗ a \lfloor\frac {dis[u]} 2\rfloor * b + dis[u]\ mod\ 2 * a list-t vlist-t2">list-r">list" style="height: 1.01em;">2dis[u]list-s">​list-r">list" style="height: 0.345em;">b+dis[u] mod 2a

代码:LuoguP3547


http://www.niftyadmin.cn/n/5384733.html

相关文章

探索NFC技术在游戏玩具娱乐,医疗保健和穿戴设备领域的三大应用

NFC是与众不同的无线技术。这意味着它只能在两个设备相近时起作用。在其他用无线技术随机广播的方式以被接收时&#xff0c;NFC更重要的独特之处于其使用电源的方式。或者&#xff0c;更确切地说&#xff0c;它可以在不供电的环境下进行工作。它是一种非接触式智能卡技术的演进…

Positive Technologies 确保 Rostic‘s 网络应用程序的安全

☑️ PT BlackBox分析 Rostics 网络应用程序的安全性 快餐连锁店在其安全网络开发过程中使用了我们的扫描仪。PT BlackBox 总共扫描了 20 多个 Rostics 的外部服务&#xff08;每天访问量超过 100,000 人次&#xff09;和企业服务&#xff08;每天访问量≈7,000 名员工&#x…

c++max、min函数的作用及示例代码与详细讲解说明以及引申知识讲解

在C中&#xff0c;std::max和std::min是两种模板函数&#xff0c;用于比较两个或更多值并返回其中的最大值或最小值。这些函数定义在<algorithm>头文件中。 std::max 和 std::min 的作用 std::max: 返回两个或更多参数中的最大值。std::min: 返回两个或更多参数中的最小…

SpringBoot+WebSocket实现即时通讯(一)

前言 本博客姊妹篇 SpringBootWebSocket实现即时通讯&#xff08;一&#xff09;SpringBootWebSocket实现即时通讯&#xff08;二&#xff09;SpringBootWebSocket实现即时通讯&#xff08;三&#xff09;SpringBootWebSocket实现即时通讯&#xff08;四&#xff09; 传统方…

js设计模式:原型模式

作用: 使用js特有的原型链机制,可以通过Object.create方法创建新对象,将一个对象作为另外一个对象的原型 也可以通过修改原型链上的属性,影响新对象的行为 可以更方便的创建一些对象 示例: let obj {getName: function(){return this.name},getAge:function(){return this…

Pinia 官网速通

前言&#xff1a;参考 Pinia 中文文档&#xff0c;在 Vue3 配合 ts 中的使用。 一&#xff1a;介绍 1. 什么是 Pinia Pinia 是 Vue 的存储库&#xff0c;允许跨组件/页面共享状态。 1.1. 为什么要使用 Pinia&#xff1f; 热模块更换、保持任何现有状态、使用插件扩展 Pinia …

【Spring连载】使用Spring Data访问 MongoDB(二)----Template API

【Spring连载】使用Spring Data访问 MongoDB&#xff08;二&#xff09;----Template API 一、方便的方法二、执行回调函数Execute Callbacks三、Fluent API四、异常转换五、域类型映射六、配置七、索引及集合管理八、保存、更新和删除Documents九、查询Documents十、Counting …

美格智能联合罗德与施瓦茨完成5G RedCap模组SRM813Q验证,推动5G轻量化全面商用

全球5G发展进入下半场&#xff0c;5G RedCap以其低成本、低功耗的特性成为行业焦点。近日&#xff0c;中国移动携手合作伙伴率先完成全球最大规模、最全场景、最全产业的RedCap现网规模试验&#xff0c;推动首批芯片、终端具备商用条件&#xff0c;RedCap端到端产业已全面达到商…