【bzoj1770/Usaco2009 Nov】lights 燈——折半搜索
Description
貝希和她的閨密們在她們的牛棚中玩遊戲。但是天不從人願,突然,牛棚的電源跳閘了,所有的燈都被關閉了。貝希是一個很膽小的女生,在伸手不見拇指的無盡的黑暗中,她感到驚恐,痛苦與絕望。她希望您能夠幫幫她,把所有的燈都給重新開起來!她才能繼續快樂地跟她的閨密們繼續玩遊戲! 牛棚中一共有N(1 <= N <= 35)盞燈,編號為1到N。這些燈被置於一個非常複雜的網絡之中。有M(1 <= M <= 595)條很神奇的無向邊,每條邊連接兩盞燈。 每盞燈上面都帶有一個開關。當按下某一盞燈的開關的時候,這盞燈本身,還有所有有邊連向這盞燈的燈的狀態都會被改變。狀態改變指的是:當一盞燈是開著的時候,這盞燈被關掉;當一盞燈是關著的時候,這盞燈被打開。 問最少要按下多少個開關,才能把所有的燈都給重新打開。 數據保證至少有一種按開關的方案,使得所有的燈都被重新打開。
Input
*第一行:兩個空格隔開的整數:N和M。
*第二到第M+1行:每一行有兩個由空格隔開的整數,表示兩盞燈被一條無向邊連接在一起。 沒有一條邊會出現兩次。
Output
第一行:一個單獨的整數,表示要把所有的燈都打開時,最少需要按下的開關的數目。
Sample Input
1 2
1 3
4 2
3 4
2 5
5 3
輸入細節:
一共有五盞燈。燈1、燈4和燈5都連接著燈2和燈3。
Sample Output
輸出細節:
按下在燈1、燈4和燈5上面的開關。
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 typedef long long LL; 5 const int N=36,mod=9875321; 6 using std::min; 7 int n,m,mni=0x3f3f3f3f,h; 8 int hash[mod],tot=0,an[600000]; 9 struct node{int ne;LL to;}e[600000]; 10 LL all; 11 int read(){ 12 int ans=0,f=1;char c=getchar(); 13 while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();} 14 while(c>='0'&&c<='9'){ans=ans*10+c-48;c=getchar();} 15 return ans*f; 16 } 17 LL f[N]; 18 int Hash(LL x){ 19 int p=x%mod; 20 for(int i=hash[p];i;i=e[i].ne)if(e[i].to==x)return i; 21 e[++tot]=(node){hash[p],x};hash[p]=tot; 22 return tot; 23 } 24 void dfs(int x,LL now,int st,int p){ 25 if(st>mni)return; 26 if(x==h+1){ 27 LL no=now;no>>=1; 28 if(no==all)mni=min(mni,st); 29 if(!p){ 30 int k=Hash(no); 31 if(an[k])an[k]=min(an[k],st); 32 else an[k]=st; 33 } 34 else{ 35 int k=Hash(all-no); 36 if(!an[k])return; 37 mni=min(mni,st+an[k]); 38 } 39 return; 40 } 41 dfs(x+1,now,st,p);dfs(x+1,now^f[x],st+1,p); 42 } 43 int main(){ 44 n=read();m=read();all=(1LL<<n)-1; 45 for(int i=1,a,b;i<=m;i++){ 46 a=read();b=read();f[a]|=(1LL<<b);f[b]|=(1LL<<a); 47 } 48 for(int i=1;i<=n;i++)f[i]|=(1LL<<i); 49 h=n/2;dfs(1,0,0,0);h=n;dfs(n/2+1,0,0,1); 50 printf("%d",mni); 51 return 0; 52 } 53
bzoj1770
转载于:https://www.cnblogs.com/JKAI/p/7665368.html
【bzoj1770/Usaco2009 Nov】lights 燈——折半搜索相关推荐
- bzoj1770: [Usaco2009 Nov]lights 燈(折半搜索)
1770: [Usaco2009 Nov]lights 燈 Time Limit: 10 Sec Memory Limit: 64 MB Submit: 1153 Solved: 564 [Sub ...
- [Usaco2009 Nov]lights
题目描述: 给出$n$,$m$,表示有$n$盏灯和$m$条奇怪的电线,按下电线一段的灯后另一端会有影响. 求最少按几次. 题解: 高消解异或方程组,得到一堆自由元后搜索自由元状态,然后不断更新答案. ...
- 异或高斯消元+暴搜 lights 燈
问题 F: [Usaco2009 Nov]lights 燈 时间限制: 1 Sec 内存限制: 64 MB 题目描述 贝希和她的闺密们在她们的牛棚中玩游戏.但是天不从人愿,突然,牛棚的电源跳闸了,所有 ...
- Codeforces Round #297 (Div. 2)E. Anya and Cubes 折半搜索
Codeforces Round #297 (Div. 2)E. Anya and Cubes Time Limit: 2 Sec Memory Limit: 512 MB Submit: xxx ...
- [luogu4799 CEOI2015 Day2] 世界冰球锦标赛(折半搜索)
传送门 Solution 折半搜索裸题,注意\(long long\) Code #include <cmath> #include <cstdio> #include < ...
- Educational Codeforces Round 76 (Rated for Div. 2) F. Make Them Similar 折半搜索
传送门 文章目录 题意: 思路: 题意: 思路: 一个显然的思路就是2302^{30}230枚举所有的xxx,让后再检查,这个复杂度显然不能接受. 又发现对于每个位置它取多少不受其他位置限制,满足可拼 ...
- 【LOJ6072】苹果树【折半搜索】【矩阵树定理】【二项式反演】
题意:有好坏两种点共 nnn 个,每个好点有权值,把这 nnn 个点连成一棵树,一个好点为有用的当且仅当它至少与一个好点相邻,求所有有用的点的权值和不超过 limlimlim 的方案数. n≤40n\ ...
- 【无码专区4】幸运数字4(折半搜索+计数+结论)
因为只有std,没有自我实现,所以是无码专区 主要是为了训练思维能力 solution才是dls正解,但是因为只有潦草几句,所以大部分会有我自己基于正解上面的算法实现过程,可能选择的算法跟std中dl ...
- [折半搜索][has] Jzoj P4250 路径
Description A国有n个城市,编号为1到n,任意两个城市之间有一条路.shlw闲得没事干想周游A国,及从城市1出发,经过且仅经过除城市1外的每个城市1次(城市1两次),最后回到城市1.由于s ...
最新文章
- 2022-2028年中国PET基膜行业市场发展规模及市场分析预测报告
- 浅谈Oracle Online redo log
- inline函数使用容易导致出错的问题
- 设置按峰值带宽计费_腾讯云服务器按流量计费带宽值大小设置说明
- Javaassist简介
- 语法分析-C语言程序
- Blob和Clob的区别和用法
- Python模拟决赛现场最终得分计算过程
- 直男不懂女人心?10953 条数据告诉你女王节送什么口红色号!
- php转换emoji表情为图片输出小程序,微信小程序中使用emoji表情相关
- 不借助 vue-cli 工具自行搭建 vue 项目
- eclipse IED 创建springboot项目教程
- 加油站微信小程序的设计与实现-计算机毕业设计
- 用Python去优惠券,看到结果我呆了!
- 云原生应用实践与未来趋势
- qt emit是什么意思_2020年11月14日 无赞赏QT吗哪 :在历史的掌权者面前作信心的决断...
- showModalDialog传值
- Could not acquire image ID or digest following build
- C24、异常处理程序和软件异常
- c++小游戏大合集(1)
热门文章
- 微信视频通话无法使用蓝牙耳机,依旧保持外放
- PyQt5精美按钮和Label控件(点击以及悬停变化)
- 爱普生Epson Stylus Pro 3800C 打印机驱动
- 按不同vlan下发dhcp_为多个VLAN配置DHCP实例
- flowable 实现逐级审批功能
- sql中常用的正则匹配
- 周易Java_做人四忌,认真看完成功一半
- 【Android车载系列】第8章 车载通信-USB协议代码实现
- 我的世界服务器改无限耐久的插件,迷你世界怎么把武器改成无限耐久 | 手游网游页游攻略大全...
- QQ音乐/酷狗音乐锁屏控制实现原理