Processing math: 100%

UOJ Round #8 赴京赶考 解题报告

算法零

n,m100,q10 的话,直接给网格中的每一个格点都建一个点,然后该怎么最短路就怎么最短路,该怎么并查集+BFS就怎么并查集+BFS。

复杂度 O(qnm),可以拿下前30分。

算法一

n105,m=1,q105 的话,我们可以直接预处理出 (1,1)(1,i) 的距离以及 (1,i)(1,n) 的距离,然后就枚举走的方式 ij 或者 jn1i 就可以啦。

复杂度 O(n+q),结合算法零可以拿下50分。

算法二

n,m105,q105 的话,我们发现我们可以突破维度的界限,把每一维拆开分别考虑,最后的答案就是每一维的答案的和。

这为啥是对的呢?

对于 aiai+1,无论 bj 取啥值,你从 (i,j) 穿越到 (i+1,j) 的时候,都必然会花费等待时间;否则如果 ai=ai+1 的话,就必然不会花费等待时间。所以一条路线的总等待时间可以拆分成各个维度的等待时间的和。

然后这个问题就变成一维问题啦,直接用算法一的搞法就可以了。

复杂度 O(n+m+q),可以拿下100分。

至于代码的话,UOJ 上一大把一大把的呀。。。

原文地址:http://vfleaking.blog.uoj.ac/blog/490

posted @   Gromah  阅读(242)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示