【最短路】【图论建模】【分类讨论】P6471 [COCI2008-2009#6] DOSTAVA

教练放在了模拟赛里,据说有 O(R2)O(R^2) 的解法,劳烦知道的 dalao 分享一下。

解法

要求任意两点间的最短距离。观察图,发现像“目”。

对于从 xxyy 的情况,如果不在同一行,则最短路只可能会有以下情况:

  1. xx 的左边出,yy 的左边进。
  2. xx 的左边出,yy 的右边进。
  3. xx 的右边出,yy 的左边进。
  4. xx 的右边出,yy 的右边进。

如果在同一行,则多一种情况:xx 直接走到 yy

使用全源最短路求从 xx 出之后到 yy 进之前的情况。这种情况的点只有 2R2R 个,边只有 6R6R 条。所以复杂度是 O(R2logR)O(R^2\log R)

实现

注意不要算重了,对于各种拐弯的情况要注意。前缀和求一行间的距离。

代码

posted @ 2024-10-08 20:26  cjrqwq  阅读(15)  评论(0)    收藏  举报  来源