Description

貝希和她的閨密們在她們的牛棚中玩遊戲。但是天不從人願,突然,牛棚的電源跳閘了,所有的燈都被關閉了。貝希是一個很膽小的女生,在伸手不見拇指的無盡的黑暗中,她感到驚恐,痛苦與絕望。她希望您能夠幫幫她,把所有的燈都給重新開起來!她才能繼續快樂地跟她的閨密們繼續玩遊戲! 牛棚中一共有N(1 <= N <= 35)盞燈,編號為1到N。這些燈被置於一個非常複雜的網絡之中。有M(1 <= M <= 595)條很神奇的無向邊,每條邊連接兩盞燈。 每盞燈上面都帶有一個開關。當按下某一盞燈的開關的時候,這盞燈本身,還有所有有邊連向這盞燈的燈的狀態都會被改變。狀態改變指的是:當一盞燈是開著的時候,這盞燈被關掉;當一盞燈是關著的時候,這盞燈被打開。 問最少要按下多少個開關,才能把所有的燈都給重新打開。 數據保證至少有一種按開關的方案,使得所有的燈都被重新打開。

Input

*第一行:兩個空格隔開的整數:N和M。

*第二到第M+1行:每一行有兩個由空格隔開的整數,表示兩盞燈被一條無向邊連接在一起。 沒有一條邊會出現兩次。

Output

第一行:一個單獨的整數,表示要把所有的燈都打開時,最少需要按下的開關的數目。

Sample Input

5 6
1 2
1 3
4 2
3 4
2 5
5 3

輸入細節:

一共有五盞燈。燈1、燈4和燈5都連接著燈2和燈3。

Sample Output

3
輸出細節:
按下在燈1、燈4和燈5上面的開關。

听说是高斯消元?不会写,留坑待填......
写了折半,大概就是先搜前一半点的状态即其代价,f[i]表示状态i的最小代价;
搜索后一半点的时候代价就是当前状态加上状态补集的代价。
再加个hash判重就可以啦。
代码:

 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 燈——折半搜索相关推荐

  1. bzoj1770: [Usaco2009 Nov]lights 燈(折半搜索)

    1770: [Usaco2009 Nov]lights 燈 Time Limit: 10 Sec  Memory Limit: 64 MB Submit: 1153  Solved: 564 [Sub ...

  2. [Usaco2009 Nov]lights

    题目描述: 给出$n$,$m$,表示有$n$盏灯和$m$条奇怪的电线,按下电线一段的灯后另一端会有影响. 求最少按几次. 题解: 高消解异或方程组,得到一堆自由元后搜索自由元状态,然后不断更新答案. ...

  3. 异或高斯消元+暴搜 lights 燈

    问题 F: [Usaco2009 Nov]lights 燈 时间限制: 1 Sec 内存限制: 64 MB 题目描述 贝希和她的闺密们在她们的牛棚中玩游戏.但是天不从人愿,突然,牛棚的电源跳闸了,所有 ...

  4. 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  ...

  5. [luogu4799 CEOI2015 Day2] 世界冰球锦标赛(折半搜索)

    传送门 Solution 折半搜索裸题,注意\(long long\) Code #include <cmath> #include <cstdio> #include < ...

  6. Educational Codeforces Round 76 (Rated for Div. 2) F. Make Them Similar 折半搜索

    传送门 文章目录 题意: 思路: 题意: 思路: 一个显然的思路就是2302^{30}230枚举所有的xxx,让后再检查,这个复杂度显然不能接受. 又发现对于每个位置它取多少不受其他位置限制,满足可拼 ...

  7. 【LOJ6072】苹果树【折半搜索】【矩阵树定理】【二项式反演】

    题意:有好坏两种点共 nnn 个,每个好点有权值,把这 nnn 个点连成一棵树,一个好点为有用的当且仅当它至少与一个好点相邻,求所有有用的点的权值和不超过 limlimlim 的方案数. n≤40n\ ...

  8. 【无码专区4】幸运数字4(折半搜索+计数+结论)

    因为只有std,没有自我实现,所以是无码专区 主要是为了训练思维能力 solution才是dls正解,但是因为只有潦草几句,所以大部分会有我自己基于正解上面的算法实现过程,可能选择的算法跟std中dl ...

  9. [折半搜索][has] Jzoj P4250 路径

    Description A国有n个城市,编号为1到n,任意两个城市之间有一条路.shlw闲得没事干想周游A国,及从城市1出发,经过且仅经过除城市1外的每个城市1次(城市1两次),最后回到城市1.由于s ...

最新文章

  1. 2022-2028年中国PET基膜行业市场发展规模及市场分析预测报告
  2. 浅谈Oracle Online redo log
  3. inline函数使用容易导致出错的问题
  4. 设置按峰值带宽计费_腾讯云服务器按流量计费带宽值大小设置说明
  5. Javaassist简介
  6. 语法分析-C语言程序
  7. Blob和Clob的区别和用法
  8. Python模拟决赛现场最终得分计算过程
  9. 直男不懂女人心?10953 条数据告诉你女王节送什么口红色号!
  10. php转换emoji表情为图片输出小程序,微信小程序中使用emoji表情相关
  11. 不借助 vue-cli 工具自行搭建 vue 项目
  12. eclipse IED 创建springboot项目教程
  13. 加油站微信小程序的设计与实现-计算机毕业设计
  14. 用Python去优惠券,看到结果我呆了!
  15. 云原生应用实践与未来趋势
  16. qt emit是什么意思_2020年11月14日 无赞赏QT吗哪 :在历史的掌权者面前作信心的决断...
  17. showModalDialog传值
  18. Could not acquire image ID or digest following build
  19. C24、异常处理程序和软件异常
  20. c++小游戏大合集(1)

热门文章

  1. 微信视频通话无法使用蓝牙耳机,依旧保持外放
  2. PyQt5精美按钮和Label控件(点击以及悬停变化)
  3. 爱普生Epson Stylus Pro 3800C 打印机驱动
  4. 按不同vlan下发dhcp_为多个VLAN配置DHCP实例
  5. flowable 实现逐级审批功能
  6. sql中常用的正则匹配
  7. 周易Java_做人四忌,认真看完成功一半
  8. 【Android车载系列】第8章 车载通信-USB协议代码实现
  9. 我的世界服务器改无限耐久的插件,迷你世界怎么把武器改成无限耐久 | 手游网游页游攻略大全...
  10. QQ音乐/酷狗音乐锁屏控制实现原理