【JZOJ 5459】密室【最短路】

Dijkstra单源最短路径代码 C/C++实现 DIJKSTRA单源最短路径算法C/C++实现,内有注释,输入邻接矩阵,输入源点到终点最短路径长度。 立即下载

题目大意:

题目链接:https://jzoj.net/senior/#main/show/5459
题目图片:
http://wx1.sinaimg.cn/mw690/0060lm7Tly1fva78gse8vj30jc0fu3z6.jpg
http://wx2.sinaimg.cn/mw690/0060lm7Tly1fva78grjjuj30jb072t8m.jpg
http://wx1.sinaimg.cn/mw690/0060lm7Tly1fva78gsbd8j30hk0c1aa8.jpg
给出一个有向图,走一条边需要一些钥匙,只有拥有这些钥匙才可以走,走完后钥匙不会消失。到达点可以获得在这个点上的钥匙。求从 1 1 1到 n n n的最短路。(边权均为1)


思路:

终于找到一道 S P F A SPFA SPFA的变形的题目了。。。
这道题在普通 S P F A SPFA SPFA的基础上增加了条件,如果能处理好这些条件,那么就是一个裸的 S P F A SPFA SPFA。
我们可以用状态压缩储存每个点有的钥匙和每条路需要的钥匙,每条路需要的钥匙可以直接在结构体里面加上一维 e [ i ] . k e y e[i].key e[i].key。
然后再跑 S P F A SPFA SPFA的时候,再加上一个队列 k e y n u m keynum keynum, k e y n u m keynum keynum的每一位应该和 q q q的每一位两两对应。 k e y n u m keynum keynum储存的是到达这个状态的时候的钥匙压缩后的数字。
那么当我们决定要走这条路的时候,除了 S P F A SPFA SPFA本身的距离判断,还要再加上一个现在拥有的钥匙是否可以走这条路的判断。我们知道,如果可以走这条路,那么就必须拥有开启这条路的钥匙,所以就有 n u m & a m p ; a m p ; e [ i ] . k e y = e [ i ] . k e y num\&e[i].key=e[i].k ey num&e[i].key=e[i].key。
最后枚举到达终点时的钥匙,并输出最小值即可。


代码:

#include <cstdio>
#include <queue>
#include <cstring>
#include <map>
#define N 6100
#define Inf 1e9
using namespace std;

int n,m,k,tot,key[N],head[N],dis[N][1024],x,y,z;
bool vis[N][1024];

struct edge
{
	int next,to,key;
}e[N];

void add(int from,int to,int num)
{
	tot++;
	e[tot].to=to;
	e[tot].key=num;
	e[tot].next=head[from];
	head[from]=tot;
}

void spfa()
{
	memset(vis,0,sizeof(vis));
	memset(dis,0x3f3f3f3f,sizeof(dis));
	vis[1][key[1]]=1;
	dis[1][key[1]]=0;  //第二维表示到达这个点时钥匙压缩后的数字
	queue<int> q;
	queue<int> keynum;
	q.push(1);
	keynum.push(key[1]);
	while (q.size())
	{
		int num=keynum.front();
		keynum.pop();
		int u=q.front();
		q.pop();
		vis[u][num]=0;
		for (int i=head[u];~i;i=e[i].next)
		{
			int v=e[i].to;
			if (((num&e[i].key)==e[i].key)&&(dis[v][num|key[v]]>dis[u][num]+1))  //num|key[v]是到达v点之后的钥匙数量
			{
				dis[v][num|key[v]]=dis[u][num]+1;
				if (!vis[v][num|key[v]])
				{
					vis[v][num|key[v]]=1;
					q.push(v);
					keynum.push(num|key[v]);
				}
			}
		}
	}
}

int main()
{
	memset(head,-1,sizeof(head));
	scanf("%d%d%d",&n,&m,&k);
	for (int i=1;i<=n;i++)
	 for (int j=k;j>=1;j--)
	 {
	 	scanf("%d",&x);
	 	if (x) key[i]+=(1<<(j-1));
	 }
	for (int i=1;i<=m;i++)
	{
		scanf("%d%d",&x,&y);
		int num=0;
		for (int j=k;j>=1;j--)
		{
			scanf("%d",&z);
			if (z) num+=(1<<(j-1));
		} 
		add(x,y,num);
	}
	spfa();
	int ans=Inf;
	for (int i=0;i<=1023;i++)
	 ans=min(ans,dis[n][i]);
	if (ans<Inf) printf("%d\n",ans);
	 else printf("No Solution");
	return 0;
}
Windows Server 2022域控环境下的MDT部署工具安装与配置避坑指南 本文详细介绍了在Windows Server 2022域控环境中安装和配置MDT(Microsoft Deployment Toolkit)的全流程,包括ADK与Windows PE的精准安装、MDT高级配置、部署工作流构建及性能优化技巧。通过实战指南帮助IT管理员实现自动化系统部署,提升企业IT运维效率,特别适用于需要静默下发系统的大规模部署场景。 阅读详情

相关推荐

模拟IC设计避坑:手把手教你用Cadence仿真恒定跨导轨到轨运放(附完整工艺库文件)

本文详细解析了使用Cadence仿真恒定跨导轨到轨运放的全流程,涵盖电路原理、工艺库配置、尺寸设计及仿真分析。通过1:3电流镜补偿技术实现跨导稳定,提供CSMC 0.25um工艺下的实战案例,帮助工程师规避设计陷阱,提升模拟IC设计效率。

weixin_30952535的博客 494

JZOJ 5459. 【NOIP2017提高A组冲刺11.7】密室

JZOJ 5459. 【NOIP2017提高A组冲刺11.7】密室 Description小X 正困在一个密室里,他希望尽快逃出密室。 密室中有N 个房间,初始时,小X 在1 号房间,而出口在N 号房间。 密室的每一个房间中可能有着一些钥匙和一些传送门,一个传送门会单向地创造一条从房间X 到房间Y 的通道。另外,想要通过某个传送门,就必须具备一些种类的钥匙(每种钥匙都要有才能通过)。幸运的是,钥匙在打开传送门的

Felix-Lee的博客 5742

ChatIE:基于ChatGPT的零样本信息抽取实战指南

信息抽取是自然语言处理中的核心任务,旨在从非结构化文本中自动识别并结构化关键信息,如实体、关系及事件。传统方法依赖大量标注数据训练专用模型,流程复杂且成本高昂。随着大语言模型的发展,通过提示工程引导模型理解任务,实现了无需训练数据的零样本抽取能力,极大降低了技术门槛与应用成本。这种范式将信息抽取重构为多轮对话问题,通过分阶段提问引导模型逐步输出结构化结果,在快速原型验证、领域适配及小规模数据探索中展现出显著技术价值。本文以ChatIE项目为例,深入解析如何利用ChatGPT API,通过精心设计的提示词与两

weixin_30540691的博客 404

实战演练 test16 T2

题目描述 【题目背景】       小 X 正困在一个密室里,他希望尽快逃出密室。         密室中有 N 个房间,初始时,小 X 在 1 号房间,而出口在 N 号房间。       密室的每一个房间中可能有着一些钥匙和一些传送门,一个传送门会单向地创造一条从房间 X 到房间 Y 的通道。另外,想要通过某个传送门,就必须具备一些种类的钥匙。幸运的是,钥匙在打开传送门的封印后,并

XH's 422

手把手教你设计低噪声前置放大电路:从光电二极管到X射线探测器的实战配置

本文实战指南详细解析了低噪声前置放大电路的设计,重点针对光电二极管和X射线探测器等微弱信号源。文章深入对比了跨阻放大器与电荷灵敏放大器的核心架构、噪声优化策略及PCB布局技巧,手把手指导从电路选型、仿真验证到调试测试的全流程,助力工程师构建精准可靠的信号链。

tech5的博客 512

LeRobot X-VLA:首个适用于任意机器人、任意任务的软提示机器人基础模型

X-VLA是一种基于软提示的视觉-语言-动作模型,通过可学习嵌入向量编码不同机器人配置,实现跨平台统一控制。该框架采用两阶段训练:先在29万次多平台任务中学习通用策略,再通过微调少量参数(仅1%)适配新机器人。实验表明,0.9B参数的X-VLA在6个仿真和3个真实平台上表现优异,如LIBERO任务达93%成功率,布料折叠任务100%完成。其核心创新是将硬件差异视为"任务",用软提示引导Transformer处理异构数据,为机器人基础模型提供可扩展方案。

2506_90492529的博客 1241

迷宫老鼠游戏

迷宫老鼠游戏 【题目】        以一个m×n的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。请设计一个算法,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论;如果有通道,请输出最短路径的通道。例如: 【分析】 首先用一个二维数组存储该迷宫,从起点位置(0,0)开始分支遍历,将起点位置作为当前扩展结点,扩展出所有出未被访问过的有效结点,即该

梦空间 1103

swl安装无法与服务器建立链接,如何解决?

🏆本文收录于《全栈Bug调优(实战版)》专栏,主要记录项目实战过程中所遇到的Bug或因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!! 备注:部分问题/疑难杂症搜集于互联网。

**My Coding Family** 2075

地下迷宫——滴滴

题目描述 小青蛙有一天不小心落入了一个地下迷宫,小青蛙希望用自己仅剩的体力值P跳出这个地下迷宫。为了让问题简单,假设这是一个n*m的格子迷宫,迷宫每个位置为0或者1,0代表这个位置有障碍物,小青蛙达到不了这个位置;1代表小青蛙可以达到的位置。小青蛙初始在(0,0)位置,地下迷宫的出口在(0,m-1)(保证这两个位置都是1,并且保证一定有起点到终点可达的路径),小青蛙在迷宫中水平移动一个单位距离需要消耗1点体力值,向上爬一个单位距离需要消耗3个单位的体力值,向下移动不消耗体力值,当小青蛙的体力值等于0的时候

清风拂面 573

滴滴数据分析80道面试题及参考答案

常见的模型评价指标有准确率、召回率、F1 值、均方误差、均方根误差、R 方等。准确率是指模型预测正确的样本数占总样本数的比例,它反映了模型预测的准确性。召回率是指模型预测为正例的样本中实际为正例的比例,它衡量了模型对正例的捕捉能力。F1 值是准确率和召回率的调和平均数,综合考虑了两者的平衡。均方误差是预测值与真实值之差的平方的平均值,它衡量了模型预测值与真实值的平均偏离程度。均方根误差是均方误差的平方根,与均方误差类似,但更直观地反映了误差的大小。

大模型大数据攻城狮的专栏 1698

2026年海能达嵌入式岗位面试题集(含参考答案)

本文总结了嵌入式系统开发中的常见面试题,涵盖项目经验、外设接口、存储系统、编程基础、操作系统等核心模块。主要内容包括:1)项目核心经历的硬件/软件架构及问题解决思路;2)SPI、I2C等接口协议的时序特点与应用要点;3)NAND Flash存储管理中的ECC校验原理和文件系统对接方案;4)USB设备枚举流程等关键知识点。这些题目针对嵌入式岗位的技术考察重点,既包含底层硬件接口细节,也涉及系统级设计与优化策略,全面考察开发者的嵌入式系统能力。

Open 359

计蒜客NOIP模拟赛4 D1T2小X的密室

小 X 正困在一个密室里,他希望尽快逃出密室。 密室中有 N 个房间,初始时,小 X 在 1 号房间,而出口在 N 号房间。 密室的每一个房间中可能有着一些钥匙和一些传送门,一个传送门会单向地创造一条从房间 X 到房间 Y 的通道。另外,想要通过某个传送门,就必须具备一些种类的钥匙(每种钥匙都要有才能通过)。幸运的是,钥匙在打开传送门的封印后,并不会消失。 然而,通过密室的传送...

aoanping0730的博客 384

第29章:PCL PrincipalCurvatures 曲率估计

PrincipalCurvatures(主曲率估计)是一种用于计算点云表面曲率的算法。曲率描述了曲面局部的弯曲程度,是表面几何特征的重要指标。在点云处理中,估计表面的曲率对于形状分析、物体识别、表面重建等任务非常重要。主曲率是曲面上某一点的最大和最小曲率方向。通过计算点云的主曲率,我们可以获得点云中每个点的局部形状特征。通常情况下,主曲率包括两个主要参数:最大主曲率(最大曲率方向上的曲率)和最小主曲率(最小曲率方向上的曲率)。优点缺点提供了对点云表面局部形状的深入分析。

yumeiguo的博客 213

Jzoj5459【NOIP2017提高A组冲刺11.7】密室

小X 正困在一个密室里,他希望尽快逃出密室。 密室中有N 个房间,初始时,小X 在1 号房间,而出口在N 号房间。 密室的每一个房间中可能有着一些钥匙和一些传送门,一个传送门会单向地创造一条从房间X 到房间Y 的通道。另外,想要通过某个传送门,就必须具备一些种类的钥匙(每种钥匙都要有才能通过)。幸运的是,钥匙在打开传送门的封印后,并不会消失。 然而,通过密室的传送门需要耗费大量的时间,因此,

扩展の灰(Extended Ash/Cooevjnz) 764

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

JZOJ5459. 【NOIP2017提高A组冲刺11.7】密室

Description小X 正困在一个密室里,他希望尽快逃出密室。 密室中有N 个房间,初始时,小X 在1 号房间,而出口在N 号房间。 密室的每一个房间中可能有着一些钥匙和一些传送门,一个传送门会单向地创造一条从房间X 到房间Y 的通道。另外,想要通过某个传送门,就必须具备一些种类的钥匙(每种钥匙都要有才能通过)。幸运的是,钥匙在打开传送门的封印后,并不会消失。 然而,通过密室的传送门需要耗

lijf2001的博客 563

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Jzoj P5459 密室___状压spfa

题目大意: 有NNN个房间,小XXX开始在房间111,出口在房间NNN,有KKK种类型的钥匙,给出通过某个房间能获得的钥匙,有MMM个传送门,每个传送门单向的从房间XXX通向房间YYY,而使用需要通过一些钥匙的搭配才能开启,钥匙在使用并不会消失。 问最少通过多少个传送门才能到达出口。 如果不能逃出这个密室,输出NoSolutionNo SolutionNoSolution。 N≤5000,M≤60...

生如夏花之绚烂 294

【JZOJ 5459】【NOIP2017提高A组冲刺11.7】密室 (状压+广搜)

问题描述 小X 正困在一个密室里,他希望尽快逃出密室。 密室中有N 个房间,初始时,小X 在1 号房间,而出口在N 号房间。 密室的每一个房间中可能有着一些钥匙和一些传送门,一个传送门会单向地创造一条从房间X 到房间Y 的通道。另外,想要通过某个传送门,就必须具备一些种类的钥匙(每种钥匙都要有才能通过)。幸运的是,钥匙在打开传送门的封印后,并不会消失。 然而,通过密室的传送门需要耗费大量的...

Fallen_Angel001的博客 308

小 X的密室

【题目背景】 小 X正困在一个密室里,他希望尽快逃出。 【题目描述】 密室中有 N个房间,初始时小 X在 1号房间,而出口在 号房间,而出口在 N号房间。 密室的每一个房间中可能有着些钥匙和传送门,会 密室的每一个房间中可能有着些钥匙和传送门,会 单向地 单向地 创造一条从房间 X到房间 Y的通道。另外,想要过某个传送门就必须具备一 的通道。另外,想要过某个传送门就必须具备一 的通道。另外

MrTinTin的博客 2375

密室逃脱之红色房间----看看你的智商

望瞅你的智商,据说齐世界只有不到4000己能够走没这个房间。 房间面点一共有13件物品,找全后就可以分开房间。 找到0-6件智商低下,相对红痴。 找到9-10件算是畸形。 找到11-12智商很高,属于智害超群。 找到13件并且走出这个房间的全世界不到4000我。

zhangziming0的专栏 602

迷宫最短路径(dfs,bfs)

迷宫最短路径 题目描述 设计一个算法找一条从迷宫入口到出口的最短路径。 输入 迷宫的行和列m n 迷宫的布局 输出 最短路径 样例输入 6 8 0 1 1 1 0 1 1 1 1 0 1 0 1 0 1 0 0 1 0 0 1 1 1 1 0 1 1 1 0 0 1 1 1 0 0 1 1 0 0 0 0 1 1 0 0 1 1 0 样例输出 (6,8)(5,7)(4,6) (4,5)(3,4) (3,3) (2,2)(1,1) 这是一道比较简单练习广搜的题,然后我刚开始写这题时并没有学习广搜,只是初步接触

weixin_46534908的博客 4584

2017模拟赛 密室(多维最短路)

二维最短路记录 表示当前状态的最小情况 注意初始情况代码#include<cstdio> #include<algorithm> #include<cmath> #include<iostream> #include<cstring> #include<queue> using namespace std; #define maxn 7001 #define inf 1e9 int n,m,k;

nkliuorz的博客 375

java手动生成迷宫找最短路径_用并查集(find-union)实现迷宫算法以及最短路径求解...

引言迷宫对于大家都不会陌生.那么迷宫是怎么生成,已经迷宫要如何找到正确的路径呢?用java代码又怎么实现?带着这些问题.我们继续往下看.并查集(find-union)朋友圈有一种算法就做并查集(find-union).什么意思呢?比如现在有零散的甲乙丙丁戊五个人.他们之间刚开始互相不认识.用代码解释就是find(person1, person2) == false,之后在某一次聚合中,甲认识了乙,...

weixin_36262567的博客 557

密室逃脱2 古堡迷城

通关界面 图片发自简书App 两次提示用完ԅ(¯ㅂ¯ԅ) 不过有意思的一个是下面这样 图片发自简书App 关键词为联系,有不少是这个类型的解锁方式。

superce的博客 1005

【洛谷P4568】飞行路线【分层图最短路】

题目大意: 题目链接:https://www.luogu.org/problemnew/show/P4568 一张无向图,每条边有权值,可以选择不超过kkk条路使这条路的权值变为0。求从SSS到TTT的最短路。 思路: 做这道题的原因:随机跳题Part3Part3Part3跳到了分层图最短路的题目qwqqwqqwq 这道题算是分成图最短路的模板吧。 由于题目中说有kkk条道路可以免费,所以直接跑...

stoorz 861
上一篇: 【洛谷P1228】地毯填补问题【分治】【递归】【DFS】
下一篇: 【JZOJ 5455】拆网线 【树形DP】
stoorz1023
博客等级 码龄9年 101粉丝 595原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值