题意限制实质上是 N1N-1 个不等式,可以用差分约束算法求解,最短路的 dis[x]dis[x] 相当于 xx 的坐标。

接下来我们根据题意对坐标的约束,建差分约束图。

首先是跳跃 DD 的限制:

先按房子的高度 hh 从小到大排,对于高度排序相邻的两个房子 xxyyh[x]<h[y]h[x] < h[y]):

  • 如果 x<yx<y ,则限制为 dis[y]dis[x]Ddis[y]-dis[x] \leq D ,点 xx 向点 yy 连边权为 DD 的有向边
  • 如果 x>yx>y ,则限制为 dis[x]dis[y]Ddis[x]-dis[y] \leq D ,点 yy 向点 xx 连边权为 DD 的有向边

其次是每个位置不能有两栋房子的限制:

对于 xxx+1x+1 ,限制为 dis[x+1]dis[x]1dis[x+1]-dis[x] \geq 1 ,转成最短路(小于等于式)就是 dis[x]dis[x+1]1dis[x]-dis[x+1] \leq -1,点 x+1x+1 向点 xx 连边权为 1-1 的有向边。

由于题目只要求两点之间的最大差值,设高度最小的点是 stst ,高度最大的点是 ededh[st]<h[ed]h[st] < h[ed])。

  • 如果 st<edst<ed ,则限制为 dis[ed]dis[st]ansdis[ed]-dis[st] \leq ansansans 即为所求答案,也就是以 stst 为源点跑最短路,得到的 dis[ed]dis[ed] 即为所求。
  • 如果 st>edst>ed ,则限制为 dis[st]dis[ed]ansdis[st]-dis[ed] \leq ansansans 即为所求答案,也就是以 eded 为源点跑最短路,得到的 dis[st]dis[st] 即为所求。

对建好的差分约束图,用 SPFA 跑单源最短路即可,有负环的话就是无解。

SPFA 时间复杂度:最坏 O(VE)O(VE),其中 VV 是顶点数,EE 是边数。

0 条评论

目前还没有评论...