Luogu4011 孤岛营救问题(拯救大兵瑞恩)分层图+最短路

题面:孤岛营救问题

如果没有钥匙,那么这题就是一个最简单的最短路,有了钥匙以后,就要朝这个方向想(一个很经典的套路):能不能对图做某些操作,使得问题再次变成一个简单的最短路问题。然后就要用到一个技巧:分层图。我们共建 2p 2 p 层图,每层图的层数表示当前拥有什么种类的钥匙(用二进制来表示),我们先建立每一层内的边,假设拥有层号代表的这些钥匙,由当前点向能走到的上下左右建立一条边权为1的边。然后建立层外的边,若当前节点有钥匙,则向代表有当前层有的钥匙+现在找到的钥匙层建边,边权为0(捡钥匙不需要时间0)然后跑一边最短路。
不得不说细节很多
代码:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<cst
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值