[APIO 2013] 机器人(斯坦纳树) | 错题本

文章目录

题目

[APIO 2013] 机器人

分析

先记搜出每个格子往上下左右推一下能滑到哪里。然后类似于斯坦纳树,定义 d p [ l ] [ r ] [ x ] [ y ] dp[l][r][x][y] dp[l][r][x][y] 表示把 l ∼ r l \sim r lr 的所有机器人搞到 ( x , y ) (x, y) (x,y) 合并的最小代价,区间 DP 外加四联通的转移,一种转移情况是 d p [ l ] [ m ] [ x ] [ y ] + d p [ m + 1 ] [ r ] [ x ] [ y ] dp[l][m][x][y] + dp[m + 1][r][x][y] dp[l][m][x][y]+dp[m+1][r][x][y],直接 DP 即可,另一种转移情况是从 ( x , y ) (x, y) (x,y) 的四联通格子 ( x ′ , y ′ ) (x', y') (x,y) 转移,即 d p [ l ] [ r ] [ x ′ ] [ y ′ ] dp[l][r][x'][y'] dp[l][r][x][y],显然会有环,这里是取 min ⁡ \min min 因此使用 SPFA(如果是取 = = = 就高斯消元)。观察到边权(转移代价)都是 1 1 1,可以用 SPFA 的 01 图优化:开两个队列,一个存所有源点,另一个存被松弛后的点,每次取两者中小的一个 front 来松弛其他点,时间优化效果很显著。

代码

咕咕咕(调了 2 个小时最后打表过的,就不放了)。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值