题目链接


Solution

这道题算是很经典的状压问题了,好题.

考虑到 \(n\) 的范围仅为 \(10\) , 那么也就是说所有状态压起来也只有 \(1024\) 种情况.

然后我们发现 \(m\) 居然小于 \(100\) .

于是可以 \(O(nm)\) 处理出每一种情况可以到达的结果.

然后形成一个有向图,然后直接跑 \(SPFA\) 就好了.


Code

  1. /*
  2. Problem: P2622
  3. Time : Day -96
  4. */
  5. #include<bits/stdc++.h>
  6. using namespace std;
  7. const int maxn=1008;
  8. struct sj{
  9. int to;
  10. int next;
  11. }a[maxn*maxn*2];
  12. int head[maxn],size;
  13. int opt[maxn][20],n,m;
  14. int read()
  15. {
  16. char ch=getchar(); int f=1,w=0;
  17. while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
  18. while(ch<='9'&&ch>='0'){w=w*10+ch-'0';ch=getchar();}
  19. return f*w;
  20. }
  21. void add(int x,int y)
  22. {
  23. a[++size].to=y;
  24. a[size].next=head[x];
  25. head[x]=size;
  26. }
  27. int c[20]={0},b[20]={0};
  28. void pre()
  29. {
  30. int tot=(1<<n)-1;
  31. for(int i=tot;i>0;i--)
  32. {
  33. for(int j=n-1;j>=0;j--)
  34. c[j]=(i>>j)&1;
  35. for(int k=1;k<=m;k++)
  36. {
  37. for(int j=n-1;j>=0;j--)
  38. {
  39. if(opt[k][j]==1&&c[j]==1)
  40. b[j]=0;
  41. else if(opt[k][j]==-1&&c[j]==0)
  42. b[j]=1;
  43. else b[j]=c[j];
  44. }
  45. int fuck=0;
  46. for(int j=n;j>=0;j--)
  47. fuck=fuck*2+b[j];
  48. add(i,fuck);
  49. }
  50. }
  51. }
  52. queue<int>q;
  53. int dis[maxn],v[maxn];
  54. void spfa()
  55. {
  56. int s=(1<<n)-1;
  57. memset(dis,127,sizeof(dis));
  58. dis[s]=0;
  59. q.push(s);
  60. v[s]=1;
  61. while(q.empty()!=1)
  62. {
  63. int x=q.front();
  64. q.pop();
  65. for(int i=head[x];i;i=a[i].next)
  66. {
  67. int tt=a[i].to;
  68. if(dis[x]+1<dis[tt])
  69. {
  70. if(!v[tt])
  71. q.push(tt),
  72. v[tt]=1;
  73. dis[tt]=dis[x]+1;
  74. }
  75. }
  76. }
  77. }
  78. int main()
  79. {
  80. n=read();
  81. m=read();
  82. for(int i=1;i<=m;i++)
  83. for(int j=0;j<n;j++)
  84. opt[i][j]=read();
  85. pre();
  86. spfa();
  87. if(dis[0]<123456)
  88. cout<<dis[0]<<endl;
  89. else
  90. cout<<"-1"<<endl;
  91. }

P2622 关灯问题II (状态压缩,最短路)的更多相关文章

  1. P2622 关灯问题II (状态压缩入门)

    题目链接: https://www.luogu.org/problemnew/show/P2622 具体思路:暴力,尝试每个开关,然后看所有的情况中存不存在灯全部关闭的情况,在储存所有灯的情况的时候, ...

  2. P2622 关灯问题II(状压bfs)

    P2622 关灯问题II 题目描述 现有n盏灯,以及m个按钮.每个按钮可以同时控制这n盏灯——按下了第i个按钮,对于所有的灯都有一个效果.按下i按钮对于第j盏灯,是下面3中效果之一:如果a[i][j] ...

  3. luogu p2622关灯问题II

    luogu p2622关灯问题II 题目描述 现有n盏灯,以及m个按钮.每个按钮可以同时控制这n盏灯--按下了第i个按钮,对于所有的灯都有一个效果.按下i按钮对于第j盏灯,是下面3中效果之一:如果a[ ...

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

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

  5. 洛谷 P2622 关灯问题II【状压DP;隐式图搜索】

    题目描述 现有n盏灯,以及m个按钮.每个按钮可以同时控制这n盏灯--按下了第i个按钮,对于所有的灯都有一个效果.按下i按钮对于第j盏灯,是下面3中效果之一:如果a[i][j]为1,那么当这盏灯开了的时 ...

  6. 洛谷 P2622 关灯问题II (状态压缩+BFS)

    题目描述 现有n盏灯,以及m个按钮.每个按钮可以同时控制这n盏灯--按下了第i个按钮,对于所有的灯都有一个效果.按下i按钮对于第j盏灯,是下面3中效果之一:如果a[i][j]为1,那么当这盏灯开了的时 ...

  7. P2622 关灯问题II

    题目描述 现有n盏灯,以及m个按钮.每个按钮可以同时控制这n盏灯——按下了第i个按钮,对于所有的灯都有一个效果.按下i按钮对于第j盏灯,是下面3中效果之一:如果a[i][j]为1,那么当这盏灯开了的时 ...

  8. 洛谷 P2622 关灯问题II【状压DP】

    传送门:https://www.luogu.org/problemnew/show/P2622 题面: 题目描述 现有n盏灯,以及m个按钮.每个按钮可以同时控制这n盏灯--按下了第i个按钮,对于所有的 ...

  9. ZOJ3718 Diablo II(状态压缩dp)

    题意:一个人物有K(K<=7)种技能,每种技能都有bi,ci,di值,表示该技能不能点超过bi次,每点一次加ci,点满bi次有一个附加得分di.然后还有N件武器,武器本身会有能力加成,然后每个武 ...

随机推荐

  1. SD Card Formatter for Mac Download

    https://www.sdcard.org/downloads/formatter_4/eula_mac/ SDFormatter Mac版是一款Mac OS平台上的sd卡修复工具,SDFormat ...

  2. npm WARN saveError ENOENT: no such file or directory, open 'C:\Users\James\package.json'

    在运行如下命令时, 遇到了问题: npm install --registry=https://registry.npm.taobao.org npm run dev 错误提示: 解决办法: 生成一个 ...

  3. DROP OPERATOR CLASS - 删除一个操作符类

    SYNOPSIS DROP OPERATOR CLASS name USING index_method [ CASCADE | RESTRICT ] DESCRIPTION 描述 DROP OPER ...

  4. db2的定时备份

    定时任务: db2.bat db2cmd -i -w db2_backup.bat exit db2_backup.bat db2 connect to TEST db2 force applicat ...

  5. ValidForm验证表单

    在做项目时,要求熟悉项目中验证表单的插件,所以学习一下validForm这个插件 http://validform.rjboy.cn/document.html#validformObject

  6. 基于GPS\北斗、GIS、GPRS技术构建智能巡检系统

    巡线工负责输油管网设施的日常巡查,可以及时发现管网设施是否完好.但巡检工作辛苦,加之管线在大部分情况下又处于良好状态,使得巡检人员麻痹大意,往往不能按规定程序进行巡检,造成巡检不到位,这样就不能从根本 ...

  7. cocos2dx 通过jni调用安卓底层方法

    cocos2dx通过封装JniHelper类来调用安卓api底层函数,该文件在cocos/platform/android/jni/JniHelper.h,使用方法如下: 打开eclipse,导入co ...

  8. python--以1-31的数字作为结尾的列表?论英文好的重要性!

    一.python基础教程第2板(修订版)[代码清单2-1]中有一段要求打印‘以1-31的数字作为结尾的列表’ 截取代码示例:endings =['st','nd','rd'] +17*['th'] + ...

  9. 896. Monotonic Array

    An array is monotonic if it is either monotone increasing or monotone decreasing. An array A is mono ...

  10. PyCharm2019 激活方式

    1.修改hosts激活:需要修改hosts,稳定无影响,持续更新,推荐~ 一.修改hosts激活 1.修改hosts文件 将0.0.0.0 account.jetbrains.com和0.0.0.0 ...