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

Day44【最短路+欧拉回路】

反色刷

欧拉回路典中典 t r i c k trick trick

不难想到把白边拆成 2 2 2 条,那么对于某个连通块,其最多会走一次回路,那就是欧拉回路(如果有两个回路显然可以合并在一起),所以对每个联通块分别判定其所有点的度数是否为偶数即可。

用并查集易维护,注意如果初始全为白就不操作。

丁香之路

i , j i,j i,j 之间的最短路是 ∣ i − j ∣ |i-j| ij,显然呐。

假设当前处理 i i i,问题相当于求一个 i i i s s s 的欧拉路径。不妨把 i i i s s s 连边,那么问题等价于从 i i i 出发的欧拉回路,注意 ( i , s ) (i,s) (i,s) 这条边不产生贡献。

考虑到欧拉图需满足如下两个性质:

  • 对于 ∀ i , 2 ∣ d e g i \forall i,2 \mid deg_i i2degi
  • 图联通

对于此题,我们先贪心的满足第一个性质(因为第二个性质难以入手啊)。

假设有一个点序列 { a 1 , a 2 , a 3 , . . . , a n } \{a_1,a_2,a_3,...,a_n\} {a1,a2,a3,...,an},满足 2 ∤ d e g a i 2 \nmid deg_{a_i} 2degai,我们很自然想到把 a 2 i a_{2i} a2i a 2 i + 1 a_{2i+1} a2i+1 连边,因为度数总和为偶数,所以 a a a 的长度为偶数,这种贪心方法肯定是可行的,然而这种方法一定是最优的吗?

不一定,因为我们要保证图联通,所以在保证边权和不变的情况下,我们要尽可能的连边,因此我们把 a 2 i a_{2i} a2i a 2 i + 1 a_{2i}+1 a2i+1 连边,一直连到 a 2 i + 1 − 1 a_{2i+1}-1 a2i+11 a 2 i + 1 a_{2i+1} a2i+1,这样相当于连了 a 2 i + 1 − a 2 i a_{2i+1}-a_{2i} a2i+1a2i 条边权为 1 1 1 的边,然而却最大限度的促使了图联通。

满足第一个性质后,图仍有可能不连通,所以我们定义两个联通块之间的边权为分别从两个联通块中选出一个点的最小距离,跑一遍最小生成树,因为每个联通块都是一个欧拉图,所以合并起来后所有点的欧拉回路要加上 M S T × 2 MST \times 2 MST×2,这是显然的。

然而最坏情况下联通块的个数会达到 n n n,此时边的规模达到了 n 2 n^2 n2,无法接受。不难发现,我们贪心保证度数均为偶数后,联通块之间有一个相对顺序,举个例子,有三个联通块分别为 a , b , c a,b,c a,b,c,那么有 w ( a , c ) = w ( a , b ) + w ( b , c ) w(a,c)=w(a,b)+w(b,c) w(a,c)=w(a,b)+w(b,c),那么最终能成为最小生成树上的边只可能是相邻联通块之间的边。

此时边的规模缩减为 n n n,所以单次求解时间复杂度为 n log ⁡ n n\log n nlogn,总时间复杂度为 O ( n 2 log ⁡ n ) O(n^2\log n) O(n2logn),可以接受。

具体实现上,可以先把 m m m 条给定边的两端点 U n i o n S e t UnionSet UnionSet 起来,再进行后续操作。

骑士游戏


http://www.mrgr.cn/news/45831.html

相关文章:

  • HeidiSQL 数据库密码如何恢复
  • 告别@Value,Spring Boot 3.3更优雅的配置注入方案
  • linux自动挂载tf卡
  • Spring系列 Bean创建过程
  • Kubernetes 深度探索:StatefulSet 之有状态应用实战
  • React Route v6. 如何防止用户导航到另一个页面
  • 数据结构-4.6.KMP算法(旧版下)-朴素模式匹配算法的优化
  • aws(学习笔记第四课) AWS的IAM服务,用于授权的策略,用户和组以及角色
  • docker compose入门5—创建一个3副本的应用
  • ◇【论文_20181020 v6】广义优势估计器 (generalized advantage estimator, GAE)
  • PicGo 配置 GitHub 作为后端存储,打造免费的图床工具
  • 知识改变命运 数据结构【java对象的比较】
  • Kubernetes 深度洞察:StatefulSet 之存储状态探秘
  • 多模态方法总结
  • 车辆重识别(2021NIPS无分类器扩散指南)论文阅读2024/10/08
  • 前端开发中的高级技巧与最佳实践
  • [Python学习日记-42] Python 中的生成器
  • 【计算机毕设】springboot-考研资讯平台(附源码)
  • 大数据新视界 --大数据大厂之 Hudi 数据湖框架性能提升:高效处理大数据变更
  • QD1-P1 HTML、CSS与JS三者之间的关系