由于一些不明原因,俺的同学们都开始搞杂题选蒋,所以我也来胡几个题(
题意简述
$n\times m$ 的网格,网格上有一些障碍和星星,以及一个球。
每次移动可以令球上下左右任意方向滚动直到撞到边界或障碍停下。
球在移动过程中会收集经过的星星。求是否能收集所有星星。
$n, m\le 50$。
主要思路
每个格子向其四个方向能到达的格子连边。缩点。
注意到每个格子向左右走到的格子必定属于一个强连通分量,上下也是。且一个星星能被收集当且仅当路径经过这两个强连通分量的至少一个。
这是一个 2-SAT 问题:
- 每个星星对应的两个强连通分量至少有一个被选择。
- 每一对选择的强连通分量都可达。
- 每个选择的强连通分量都从起点可达。
时间复杂度 $O(n^2m^2)$,但显然不满,感觉开 200 都绰绰有余。
参考代码
1 |
|