Description

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

Input

第一行三个整数N,M,K,分别表示房间的数量、传送门的数量以及钥匙的种类数。
接下来N 行,每行K 个0 或1,若第i 个数为1,则表示该房间内有第i 种钥匙,若第i 个数为0,则表示该房间内没有第i 种钥匙。
接下来M 行,每行先读入两个整数X,Y,表示该传送门是建立在X 号房间,通向Y 号房间的,再读入K 个0 或1,若第i 个数为1,则表示通过该传送门需要i 种钥匙,若第i 个数为0,则表示通过该传送门不需要第i 种钥匙。

Output

输出一行一个“No Solution”,或一个整数,表示最少通过的传送门数。

Sample Input

3 3 2
1 0
0 1
0 0
1 3 1 1
1 2 1 0
2 3 1 1

Sample Output

2

Data Constraint

Solution

  • 看到 k≤10k\leq10 ,就想到状压DP——二进制状态!

  • 于是考虑从起点开始做一遍SPFA,用一个二维状态存即可(位置和状态)。

  • 但由于边权为 1 ,没有松弛操作,所以只需 BFS 一遍,输出终点答案即可。

Code

#include<cstdio>
#include<cstring>
using namespace std;
const int N=6001;
struct data
{int x,y;
}q[N*1000];
int tot,ans=1e9;
int first[N],next[N],en[N],w[N];
int a[N],dis[N][1025];
inline int read()
{int X=0,w=1; char ch=0;while(ch<'0' || ch>'9') {if(ch=='-') w=-1;ch=getchar();}while(ch>='0' && ch<='9') X=(X<<3)+(X<<1)+ch-'0',ch=getchar();return X*w;
}
inline int min(int x,int y)
{return x<y?x:y;
}
inline void insert(int x,int y,int z)
{next[++tot]=first[x];first[x]=tot;en[tot]=y;w[tot]=z;
}
int main()
{int n=read(),m=read(),k=read();for(int i=1;i<=n;i++)for(int j=0;j<k;j++) a[i]+=read()<<j;for(int i=1;i<=m;i++){int x=read(),y=read(),z=0;for(int j=0;j<k;j++) z+=read()<<j;insert(x,y,z);}memset(dis,60,sizeof(dis));int l=dis[1][a[1]]=0,r=1;q[1].x=1,q[1].y=a[1];while(l<r){data now=q[++l],t;for(int i=first[now.x];i;i=next[i])if((now.y&w[i])==w[i] && dis[now.x][now.y]+1<dis[en[i]][now.y|a[en[i]]]){dis[en[i]][now.y|a[en[i]]]=dis[now.x][now.y]+1;if(en[i]==n) ans=min(ans,dis[en[i]][now.y|a[en[i]]]);t.x=en[i],t.y=now.y|a[en[i]];q[++r]=t;}}if(ans==1e9) puts("No Solution"); else printf("%d",ans);return 0;
}

JZOJ 5459. 【NOIP2017提高A组冲刺11.7】密室相关推荐

  1. JZOJ 5441. 【NOIP2017提高A组冲刺11.1】序列

    Description 给定一个1~n的排列x,每次你可以将x1~xi翻转.你需要求出将序列变为升序的最小操作次数.有多组数据. Input 第一行一个整数t表示数据组数. 每组数据第一行一个整数n, ...

  2. JZOJ 5458. 【NOIP2017提高A组冲刺11.7】质数

    Description 小X 是一位热爱数学的男孩子,在茫茫的数字中,他对质数更有一种独特的情感.小X 认为,质数是一切自然数起源的地方. 在小X 的认知里,质数是除了本身和1 以外,没有其他因数的数 ...

  3. JZOJ 5455. 【NOIP2017提高A组冲刺11.6】拆网线

    Description 企鹅国的网吧们之间由网线互相连接,形成一棵树的结构.现在由于冬天到了,供暖部门缺少燃料,于是他们决定去拆一些网线来做燃料.但是现在有K只企鹅要上网和别人联机游戏,所以他们需要把 ...

  4. JZOJ 5445. 【NOIP2017提高A组冲刺11.2】失格

    Description 胆小鬼连幸福都会害怕,碰到棉花都会受伤,有时还被幸福所伤. --太宰治<人间失格> 回顾我的一生,一共有n个事件,每一个事件有一个幸福值p_i. 我想用n-1条线把 ...

  5. JZOJ 5466. 【NOIP2017提高A组冲刺11.9】玩游戏

    Description 小A得了忧郁综合症,小B正在想办法开导她. 机智的小B决定陪着小A玩游戏,他从魔法的世界里变出一张无向联通图,每条边上都有边权.小B定义一条路径的权值为所有经过边中的最大权值, ...

  6. JZOJ 5462. 【NOIP2017提高A组冲刺11.8】好文章

    Description nodgd写了一篇文章,自认为这是一篇好文章.nodgd的文章由n个小写英文字母组成.文章的一个子串指的是文章中的一段连续的字母,子串的长度就是这一段的字母个数.nodgd在文 ...

  7. JZOJ 5463. 【NOIP2017提高A组冲刺11.8】证书

    Description Pulumi生活在P城的角落,而他的朋友们gjdy,oyski,tutuwai等等生活在P城的靠中心位置. P城很大,但它拥有优秀的城市结构,同时P城重视文化教育的发展,P城共 ...

  8. JZOJ 5460. 【NOIP2017提高A组冲刺11.7】士兵训练

    Description Input 第一行两个数n,q 表示士兵数以及阅兵次数. 接下来一行n-1 个整数,第i 个整数表示士兵i+1 的直属教官. 接下来n 行每行两个整数i i b ,l 描述一位 ...

  9. JZOJ 5454. 【NOIP2017提高A组冲刺11.5】仔细的检查

    Description nodgd家里种了一棵树,有一天nodgd比较无聊,就把这棵树画在了一张纸上.另一天nodgd更无聊,就又画了一张. 这时nodgd发现,两次画的顺序是不一样的,这就导致了原本 ...

最新文章

  1. Spark+hadoop+mllib及相关概念与操作笔记
  2. 支付宝支付 - 异步通知与同步通知
  3. Android 测试支持库 1.0 现已发布!
  4. python自动点击网页按钮_Python+Selenium使用(二)- 自动点击下一页
  5. C# 监控字段_有哪些好的C#开源项目推荐?
  6. css的属性是变量是怎么表达,CSS自定义变量属性——像less,sass那样在css中使用变量(译)...
  7. 计算机网络第五章课后答案第七版(谢希仁著)
  8. 目标检测论文综述(一)深度卷积神经网络
  9. roc_curve()的用法及用途
  10. getBytes方法
  11. 在Windows 10 64 位机器上安装Debug
  12. 星际争霸 vs 魔兽争霸3 vs 红警完全对比
  13. Cacti之交换机端口无法正常显示
  14. 差异表达基因热图怎么看_基因表达谱热图绘制
  15. 工程伦理 清华慕课网答案
  16. Apollo入门使用手册
  17. 目标检测——小目标检测问题
  18. c盘空间不足怎么清理(电脑磁盘空间不足怎么清理)
  19. APP流量变现的“快车”,你坐上了吗?
  20. 兽医提醒:狗狗生病的9个征兆,建议铲屎官收藏,以备不时之需!

热门文章

  1. C#字节数组与值类型变量的互相转换,以及注意事项
  2. oracle 一行转多行,oracle 一行变多行
  3. win10下gnuplot的安装
  4. [云炬创业管理笔记]第九章为创业成败而准备测试1
  5. 科大星云诗社动态20210526
  6. oracle aced什么资质,ACOUG 中国行—暨Oracle WDP云数据之旅,火热报名中……
  7. SiamMask:视频跟踪最高精度 (中科院王强大神作品)
  8. 转换到 COFF 期间失败: 文件无效或损坏
  9. 一碗面,害了一个孩子,却惊醒了中国无数父母!
  10. Delphi与c++ 数据类型对照表(从万一的博客园摘录)