专栏文章

题解:SP208 STORE - Store-keeper

SP208题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mionafbi
此快照首次捕获于
2025/12/02 21:59
3 个月前
此快照最后确认于
2025/12/02 21:59
3 个月前
查看原文
我们关心的是箱子的移动次数,而不是人的。所以箱子的位置相同,人在任何位置都是等价的……吗?
并不是,箱子会挡人。箱子可能让本来连通的部分变得不连通,但是在同一个连通块(考虑了箱子)之内的确实是等价的。
显然,我们只需要考虑人在箱子的相邻上/下/左/右四个方位的情况。其余情况要么可以转化为这四种情况,要么不可达。
我们设 fi,j,kf_{i,j,k} 为箱子坐标为 (i,j)(i,j) 而人在箱子的 kk 方位,其中 k=1,2,3,4k=1,2,3,4 分别表示上、下、左、右。那么考虑一次移动:
  • 人的移动。从箱子的一个方位走到另一个方位。fi,j,afi,j,bf_{i,j,a}\to f_{i,j,b},能够转移当且仅当在箱子挡住了 (i,j)(i,j) 的情况下,人可以在两个方位之间移动,并且人的新坐标是空位置 w。代价为 00
  • 推箱子。fi,j,afi,j,af_{i,j,a}\to f_{i',j',a},因为不会改变人和箱子的相对方位。而 ii'jj' 相对 iijj 的变化量由 aa 决定。能够转移当且仅当位置 (i,j)(i',j') 为空。代价为 11
后者是很好处理的,只需要 Θ(1)\Theta(1) 次判断。而前者则需要思考。
去掉一个点后,两点的连通性。你想到了什么?没错,割点
根据定义,同一个点双连通分量中,去掉任意一个点后还是连通的。如果不在一个点双连通分量呢?
考虑到它们不在同一个点双连通分量,故它们之间至多有一条节点互不相交的路径(除了两个端点相同)。而它们之间的一条路径一条就是连接到去掉的点,又连接到另一个点的。除去端点就只有一个点:删除的点。所以两者之间所有路径都经过这个点,删掉之后必然不连通!
所以我们就得到了结论:连通当且仅当属于同一个点双连通分量!就可以进行第一个转移了。
最后考虑到转移代价为 0011,使用 01-bfs 解决。考虑时间复杂度?
  • 建图&找点双:Θ(nm)\Theta(nm)
  • 状态数:Θ(nm)\Theta(nm)
  • 转移代价:Θ(1)\Theta(1)
所以总时间复杂度达到了最优的 Θ(nm)\Theta(nm)(输入数据都需要这么多时间)!
另:此题出处是 POI 1999,也是 BZOJ 2574,可以在提交(截至本文编写日期 2025/7/292025/7/29,黑暗爆炸是爆炸的状态)。

评论

0 条评论,欢迎与作者交流。

正在加载评论...