首页 > 其他分享 >ABC232G

ABC232G

时间:2024-12-24 21:43:53浏览次数:7  
标签:bmod leq 建图 ABC232G 边数 负权 边权

大致题意

你有一个 \(n\) 个点的有向完全图。

每个点有两个属性 \(a_i\) 和 \(b_i\)。\(u \to v\) 的边的权值是 \((a_u+b_v) \bmod m\)。

给你 \(n\) , \(m\) 和 \(\{a_i\}\) 以及 \(\{b_i\}\) , 求 \(1\) 到 \(n\) 的最短路。

  • $ 2\ \leq\ N\ \leq\ 2\ \times\ 10^5 $
  • $ 2\ \leq\ M\ \leq\ 10^9 $

Solution

观察题面,发现如果没有 \(\bmod m\) 是容易的,所以先考虑怎么处理 \(\bmod m\)

容易想到 \(a_u+b_v \leq 2m-2\),可以变为:

  • 当 \(a_u+b_v \leq m-1\) 时,边权为 \(a_u+b_v\)
  • 当 \(m \leq a_u+b_v \leq 2m-2\) 时,边权为 \(a_u+b_v-m\)

接下来我们可以想到,将有 \(-m\) 和没有的分开来。

所以考虑将 \(b\) 数组排序,这样对于一个确定的 \(u\) 一段前缀的边权是 \(a_u+b_v\) ,一段后缀的边权是 \(a_u+b_v-m\)

于是对于每个点 \(u\) 可以建出类似下图的东西

然而发现边数是 \(O(n^2)\),考虑到一个点总是对一段连续的后缀连边时边权有 \(-m\)

于是想到可以用前缀和优化建图

于是得到了一个边数 \(O(6n)\) 的图,有负权边

所以只能使用SPFA

容易发现,它真的已经死了

喜提TLE

边数已经足够优,考虑如何消除负权边,这样就可以跑dij

原本建图中的负权边只在圈圈连到三角包的时候有

\(-m\) 是必须存在的,而原题中只有 \(a_u+b_v \leq m\),所以只能将负权边该为 \(a_u+b_v-m\)

(比如图中圆圈3连到三角包5的边权值该为 \(a_3+b_5-m\))

考虑如何弥补正确性问题

既然都有前缀和优化建图了,那自然可以使用差分

可以得到如下的一个建图

于是跑一个dij即可通过,复杂度为 \(O(n\log n+m\log n)\)

标签:bmod,leq,建图,ABC232G,边数,负权,边权
From: https://www.cnblogs.com/kentsbk/p/18628741

相关文章

  • [ABC232G] Modulo Shortest Path (优化建图)
    链接:https://www.luogu.com.cn/problem/AT_abc232_g暴力的做法肯定不行,这道题要用到一个比较经典的拆点操作:把一个点拆成内点和外点。在接下来的分析中会慢慢介绍。由于题目每次连的边都是单向边,那要考虑的问题是:比如说现在要从1走到3,怎么走才能与暴力建边等价。先不考虑取模这......
  • [ABC232G] Modulo Shortest Path
    ProblemStatementWehaveadirectedgraphwith$N$vertices,calledVertex$1$,Vertex$2$,$\ldots$,Vertex$N$.Foreachpairofintegerssuchthat$1\leqi......