昨天比赛的 T3,题解思路比较新颖,小记一下。

题意

网格图上,人物要从 \((0,0)\) 走到 \((n,m)\)

给出两个长度分别为 \(n,m\) 的序列 \(a,b\),若 \(a_i+b_j>0\),则 \((i,j)\) 不可进入。

问人物能否走到 \((n,m)\)。注意 \(a_0=b_0=0\)

\(n,m \le 10^6,|a_i|,|b_i| \le 10^9\)

题解

如果只是一般的网格图,复杂度最小是 \(O(nm)\)。此题构造网格的特点在于:任意两行或两列的状态一定有包含关系。

不难发现答案为是的一个必要条件:行的最小值所在的列全为 \(1\),列也同理。因为状态存在包含关系,而这两条行列的状态是最大的。

我们称这两条行列为“红线”。然后可以分解为两部分:\((0,0)\) 到红线,\((n,m)\) 到红线。以前者为例。

此时复杂度仍然是 \(O(nm)\) 的。继续利用包含关系的性质。考虑如下图:

image

实际上,圈出的线段可以删去。因为其左右均不连通,作用仅是通过绿色的边沟通左下与右上。但根据竖边的包含关系,不会存在这两条绿边,其中一条会是黄边。那么仅用红色长横边和黄色竖边即可代替原来的三条边。

以此类推,所有不和坐标轴连通的边均可删去。那么只剩下 \(O(n)\) 条边,答案也容易判断了。

原文地址:http://www.cnblogs.com/FishJokes/p/16885351.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性