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

题解:ABC232G Modulo Shortest Path

由于 \(\forall i,a_i < m,b_i < m\),所以可能的边权要么是 \(a_i+b_j\),要么是 \(a_i+b_j-m\),下文简称其为一类边和二类边。

暴力建图太浪费了,发现与一个 \(a_i\) 的连边是二类边的 \(b_j\) 的值单调不减。

所以我们可以把所有点拆成入点和出点,简单理解为入点代表 \(b\),出点代表 \(a\)。入点按照 \(b\) 的值排序,每个排序后的入点 \(i\) 往它大的一个入点 \(i+1\) 连一条边权为 \(b_{i+1}-b_i\) 的边。这样我们只需要对于每个出点 \(a_i\),在 \(b\) 上二分出最小的 \(b_j\) 使得 \(a_i+b_j \ge m\),让 \(a_i\)\(b_j\) 连一条权值为 \(a_i+b_j-m\) 的边,就相当于处理出了 \(a_i\) 对应的所有二类边。

一类边同样处理,建一个源点,连向排序后的 \(b_1\) 对应的入点,边权为 \(b_1\),这样,只要每个出点 \(a_i\) 向这个源点连一条权值为 \(a_i\) 的边,就相当于处理出了这个出点对应的所有一类边。不难发现这样建图,一类边的处理是不会与二类边的处理相互干涉的。

最后每个入点向对应的出点连一条边权为 \(0\) 的边,跑最短路即可。
复杂度 \(O(n \log n)\),因为新图上点数和边数都是 \(O(n)\) 的。

Code

http://www.zskr.cn/news/48809.html

相关文章:

  • 如何在 Mac 上安装 MySQL 8.0.20.dmg(从下载到使用全流程,附安装包)
  • 基于Ai元人文构想的关系图
  • 题解:P10360 [PA 2024] Desant 3
  • 软件项目管理工具推荐|飞书项目 vs Asana vs ClickUp vs Jira
  • 题解:AT_abc232_g [ABC232G] Modulo Shortest Path
  • QF-Lib:用一个库搞定Python量化回测和策略开发
  • 软件工程学习日志2025.11.13
  • 完整教程:数值计算-线性方程组的迭代解法
  • 深入解析:三维旋转矩阵的左乘与右乘
  • HEVC视频扩展免费下载
  • 序列化概念及Jackson注解实现动态JSON响应
  • 2025热门学宠物美容师榜:黑龙江学宠物美容师/宠物美容师培训学校毛孩精致变美秘籍!
  • react-window API完全手册:参数、方法与事件全解析 - 指南
  • IOS抓包------Stream
  • 实用指南:数据库的事务和索引
  • 一键账户接管漏洞分析:XSS与CSRF链式攻击实战
  • Vue 3 完全指南:响应式原理、组合式 API 与实战优化 - 实践
  • 创建你的第一个Java文件
  • Imbalance
  • 2025 年 11 月展厅设计公司权威推荐榜:企业展厅、校史馆、博物馆、多媒体数字及VR线上虚拟展厅设计厂家精选
  • 易路AI人才罗盘:点亮组织内部的人才“星空”,让每一次人才决策都精准有据
  • (八大排序)基数排序
  • 业务用例的四个核心要素 - f
  • 20232322 2025-2026-1 《网络与系统攻防技术》实验五实验报告
  • 网易梦幻事业部游戏测试开发外包面经(一面)
  • 抚州0.5mm镜面铝板无压痕模厂家优选,品质稳定采购无忧
  • v模型按开发阶段分为四阶段:单元测试、集成测试、系统测试验收测试
  • Python迭代器_迭代器对象可迭代对象必须分开场景
  • 集合框架、io流、多线程
  • Ubuntu 22.04 x86_64 cron不执行原因 - whitesky