状压+BFS

通过观察数据范围可知,我们应该状压钥匙种类,直接BFS即可

注意,一个点处可能不知有一把钥匙

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstdlib>
#include <queue>
using namespace std;
bool f[14][14][1200];
int n,m,p,k,s,key[15][15],block1[15][15],block2[15][15],dx[4]={-1,0,0,1},dy[4]={0,-1,1,0};
struct pa{
int x,y,key,tim;
};
queue<pa> q;
int main(){
cin>>n>>m>>p;
cin>>k;
for(int i=1;i<=k;i++){
int a1,a2,b1,b2,g;
cin>>a1>>b1>>a2>>b2>>g;
if(!g) g=50;
if(a1==a2) block1[a1][min(b1,b2)]=g;
else block2[min(a1,a2)][b1]=g;
}
cin>>s;
for(int i=1;i<=s;i++){
int a,b,ty;
cin>>a>>b>>ty;
key[a][b]=key[a][b]|(1<<(ty-1));
}
/* for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
printf("%d ",block2[i][j]);
}
printf("\n");
}*/
pa a;
a.x=1;a.y=1;a.key=key[1][1];a.tim=0;
q.push(a);f[1][1][a.key]=1;
while(!q.empty()){
pa u=q.front();q.pop();
//printf("%d %d %d u\n",u.x,u.y,u.key);
for(int i=0;i<4;i++){
int x=u.x+dx[i],y=u.y+dy[i];
if(x>0&&x<=n&&y>0&&y<=m){
if(((i==1)||(i==2))&&block1[min(x,u.x)][min(y,u.y)]){
if(block1[min(x,u.x)][min(y,u.y)]==50) continue;
if(!((u.key>>(block1[min(x,u.x)][min(y,u.y)]-1))&1)) continue;
}
if(((i==0)||(i==3))&&block2[min(x,u.x)][min(y,u.y)]){
if(block2[min(x,u.x)][min(y,u.y)]==50) continue;
if(!((u.key>>(block2[min(x,u.x)][min(y,u.y)]-1))&1)) continue;
}
pa v;
v.x=x;v.y=y;v.key=u.key|key[x][y];v.tim=u.tim+1;
if(!f[x][y][v.key]) q.push(v),f[x][y][v.key]=1;
if(x==n&&y==m){
printf("%d\n",v.tim);
return 0;
}
}
}
}
printf("-1\n");
return 0;
}

洛谷 [P4011] 孤岛营救问题的更多相关文章

  1. 洛谷 P4011 孤岛营救问题【最短路+分层图】

    题外话:昨夜脑子昏沉,今早一调试就过了...错误有:我忘记还有墙直接穿墙过...memset初始化INF用错了数...然后手残敲错一个状态一直过不了样例...要是这状态去比赛我简直完了......or ...

  2. 洛谷P4011 孤岛营救问题(状压+BFS)

    传送门 和网络流有半毛钱关系么…… 可以发现$n,m,p$都特别小,那么考虑状压,每一个状态表示位置以及钥匙的拥有情况,然后每次因为只能走一步,所以可以用bfs求出最优解 然后是某大佬说的注意点:每个 ...

  3. 洛谷 P4011 孤岛营救问题【bfs】

    注意: 一个点可能有多把钥匙,所以把每个点有钥匙的情况状压一下 两个点之间有障碍的情况只给出了单向,存的时候记得存一下反向 b[i][j]表示当前点拥有钥匙的状态,g[x1][y1][x2][y2]表 ...

  4. Luogu P4011 孤岛营救问题(状态压缩+最短路)

    P4011 孤岛营救问题 题意 题目描述 \(1944\)年,特种兵麦克接到国防部的命令,要求立即赶赴太平洋上的一个孤岛,营救被敌军俘虏的大兵瑞恩.瑞恩被关押在一个迷宫里,迷宫地形复杂,但幸好麦克得到 ...

  5. 洛谷P4011 【网络流24题】 孤岛营救问题 (BFS+状压)

    一道妙题啊......(不知道为什么这道题的标签是网络流,不需要用网络流啊) 如果没有门和钥匙,连边(边权为1)求最短路就行了. 但是有这两个因素的限制,我们采用分层建图的思想,一共2p层,每层对应持 ...

  6. P4011 孤岛营救问题

    \(\color{#0066ff}{题目描述}\) 1944 年,特种兵麦克接到国防部的命令,要求立即赶赴太平洋上的一个孤岛,营救被敌军俘虏的大兵瑞恩.瑞恩被关押在一个迷宫里,迷宫地形复杂,但幸好麦克 ...

  7. Luogu P4011 孤岛营救问题

    题目链接 \(Click\) \(Here\) 注意坑点:一个地方可以有多把钥匙. 被卡了一会,调出来发现忘了取出来实际的数字,直接把二进制位或上去了\(TwT\),其他的就是套路的分层图最短路.不算 ...

  8. 「LOJ#6121」「网络流 24 题」孤岛营救问题(BFS

    题目描述 1944 年,特种兵麦克接到国防部的命令,要求立即赶赴太平洋上的一个孤岛,营救被敌军俘虏的大兵瑞恩.瑞恩被关押在一个迷宫里,迷宫地形复杂,但幸好麦克得到了迷宫的地形图.迷宫的外形是一个长方形 ...

  9. 洛谷 P1396 营救

    题目链接 https://www.luogu.org/problemnew/show/P1396 题目描述 “咚咚咚……”“查水表!”原来是查水表来了,现在哪里找这么热心上门的查表员啊!小明感动的热泪 ...

随机推荐

  1. SQL强化(一)保险业务

    保险业务 : 表结构 : sql语句 : /*1. 根据投保人电话查询出投保人 姓名 身份证号 所有保单 编号 险种 缴费类型*/SELECTt2.cust_name,t2.idcard,t4.pro ...

  2. 好的Qt学习资料

    1.青春不老,奋斗不止!---CSDN博客地址http://blog.csdn.net/liang19890820:

  3. 如何动态修改网页的标题(title)?

    有时候我们需要复用一个页面,但是又希望他们拥有各自的标题,这时候就需要动态的去更改页面的title了,不然所有页面都是一个标题. 这时候就会想到使用js或jQuery去实现了. 1.js方式. 首先, ...

  4. thinkphp无法加载控制器:Admin

    在使用thinkphp时,通过某入口文件访问其他非默认的模块(比如Admin模块),出现报错: 无法加载控制器:Admin 原因:入口文件(比如index.php)中定义了绑定某个具体的模块 如:de ...

  5. ser-u服务器安装和使用(创建ftp服务器)

    安装serv-u,创建ftp服务器,以及连接服务器上传和下载文件. 工具/原料 serv-u,8uftp 装有win7以上或者winserver系统的电脑 安装serv-u 1 http://pan. ...

  6. Mybatis问题:There is no getter for property named 'unitId' in 'class java.lang.String'

    Mybatis遇到的问题 问题: org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.re ...

  7. RAC和单节点数据库的区别有哪些?RAC最有用的功能是什么?

    区别 (1)RAC有2个以上的实例,单节点只有1个实例 (2)RAC具有实例级别的高可用 (3)实例与实例之间通过内联网络交换数据,单节点不可 (4)RAC每个节点都有自己套SGA.后台进程.redo ...

  8. apktool给软件加注册机修改图标和文件名

    功能实现,即让你的软件具有注册机功能,或者破解别人的软件,据为己有! 先反编译文件包 然后全局工具,修改图标和名称 加注册机,输入key,下载计算器,即可.给某个用户设置自定义的使用时间!

  9. underscore.js 源码阅读 一 整体结构

    // 整个underscore的实现包在一个立即执行函数中,避免污染全局对象 // 通过call(this)来入全局变量 (function() { // 缓存this var root = this ...

  10. linux_快照和克隆

    什么是快照? 操作虚拟机时候,想保存当前状态为以后操作失误快速那时保存的系统状态,想当于对系统的版本管理,每个节点之间可以互相切换 什么是克隆? 可以选择快照和当前状态,可选择链接克隆和完整克隆 链接 ...