题目传送门
容易看出是最短路,但是直接暴力加边最多可以加出
n
2
n^2
n2条,这是57pts的,所以需要优化…
一种优化方法是利用分块思想,网上有很多就不再赘述了,大体思路是:根据摩天楼分成
n
\sqrt n
n块,如果
p
i
≥
n
p_i\ge \sqrt n
pi≥n就暴力建边,如果
p
i
<
n
p_i< \sqrt n
pi<n就按步数拆点,再连一些使图联通的边就好了。
这种方法最多建边数为
n
n
n\sqrt n
nn级别的,请注意级别二字以防RE。
但是这玩意特别好卡,只要
p
i
p_i
pi特殊(如相同且特别小)就可以卡出TLE或MLE…(虽然原题数据没卡,UOJ97分到BZOJ是可以A的)
所以我们反卡过去,改变策略,改变块大小…
然后:
Click here to get further information
卡了20+次,发现UOJ一共加了50+组数据卡试块大小的程序…这都有毒…
所以说这玩意不是最优的…
(不过那些卡块大小的你们够了…)
怎么办?
不会了,直接暴力…
首先,如果一条边的终点处没有doge,这条边不能要,可以少一些边。
其次,根据那些卡的数据
p
i
p_i
pi都一样,如果一个建筑物处已经加过
p
i
p_i
pi这种边,以后的就可以不加了,这样可以少加很多边。
为了再少加一些边,可以把输入按
p
i
p_i
pi从小到大排序。
然后用堆优化Dijkstra代替SPFA,开个O2,就能过了。
然后其实被卡在ET#31无法自拔…那个AC应该是卡时过的…
随便吧大家卡一卡…
Code
UPD:还有一种写法…应该是卡不掉的…
请参考这里的代码
Hack太危险了…
[APIO] [最短路] [UOJ#111] APIO2015 Jakarta Skyscrapers
最新推荐文章于 2018-09-14 18:29:22 发布