BZOJ 1770: [Usaco2009 Nov]lights 燈
Description
一个图,对一个点进行操作会改变这个点及其相邻的点的状态,问全部变成黑色至少需要几次.数据保证有解.
Sol
Meet in middle.
我一开始写个高斯消元,发现有两个点过不去,原因是没有处理好自由元,应该在DFS的时候回带所有解,然后就弃疗了.
然后发现这个其实可以暴力,就是 Meet in middle...
先把前一半暴力枚举存到 map 里,后一半再枚举,从 map 中找补集.
复杂度 \(O(2^{13})\)
Code
/**************************************************************
Problem: 1770
User: BeiYu
Language: C++
Result: Accepted
Time:416 ms
Memory:5384 kb
****************************************************************/ #include <cstdio>
#include <map>
#include <iostream>
using namespace std; typedef long long LL;
const int N = 40; int n,m,ans=N;
LL state,pow2[N],a[N];
map< LL,int > mp; void DFS1(int l,int r,int w,LL s){
if(l>r){ if(mp.find(s)==mp.end() || mp[s]>w) mp[s]=w;return; }
DFS1(l+1,r,w,s);
DFS1(l+1,r,w+1,s^a[l]);
}
void DFS2(int l,int r,int w,LL s){
if(l>r){ if(mp.find(state^s)!=mp.end()) ans=min(ans,w+mp[state^s]);return; }
DFS2(l+1,r,w,s);
DFS2(l+1,r,w+1,s^a[l]);
}
int main(){
cin>>n>>m;
pow2[0]=1LL;
for(int i=1;i<=n;i++) pow2[i]=pow2[i-1]<<1;
for(int i=0;i<n;i++) a[i]|=pow2[i],state|=pow2[i];
for(int i=1,u,v;i<=m;i++){
cin>>u>>v;
u--,v--;
a[u]|=pow2[v],a[v]|=pow2[u];
}
DFS1(0,min(n-1,n/2),0,0);
DFS2(min(n-1,n/2)+1,n-1,0,0);
cout<<ans<<endl;
return 0;
}
BZOJ 1770: [Usaco2009 Nov]lights 燈的更多相关文章
- BZOJ 1770: [Usaco2009 Nov]lights 燈( 高斯消元 )
高斯消元解xor方程组...暴搜自由元+最优性剪枝 -------------------------------------------------------------------------- ...
- 【高斯消元】BZOJ 1770: [Usaco2009 Nov]lights 燈
Description 貝希和她的閨密們在她們的牛棚中玩遊戲.但是天不從人願,突然,牛棚的電源跳閘了,所有的燈都被關閉了.貝希是一個很膽小的女生,在伸手不見拇指的無盡的黑暗中,她感到驚恐,痛苦與絕望. ...
- BZOJ 1770: [Usaco2009 Nov]lights 燈 [高斯消元XOR 搜索]
题意: 经典灯问题,求最少次数 本题数据不水,必须要暴搜自由元的取值啦 想了好久 然而我看到网上的程序都没有用记录now的做法,那样做遇到自由元应该可能会丢解吧...? 我的做法是把自由元保存下来,枚 ...
- bzoj 1770: [Usaco2009 Nov]lights 燈【高斯消元+dfs】
参考:https://blog.csdn.net/qq_34564984/article/details/53843777 可能背了假的板子-- 对于每个灯建立方程:与它相邻的灯的开关次数的异或和为1 ...
- 【BZOJ】1770 [Usaco2009 Nov]lights 燈
[算法]高斯消元-异或方程组 [题解]良心简中题意 首先开关顺序没有意义. 然后就是每个点选或不选使得最后得到全部灯开启. 也就是我们需要一种确定的方案,这种方案使每盏灯都是开启的. 异或中1可以完美 ...
- bzoj1770: [Usaco2009 Nov]lights 燈(折半搜索)
1770: [Usaco2009 Nov]lights 燈 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 1153 Solved: 564[Submi ...
- 【BZOJ 1770 】 [Usaco2009 Nov]lights 燈 dfs+异或方程组
这道题明显是异或方程组,然而解不一定唯一他要的是众多解中解为1的数的最小值,这个时候我们就需要dfs了我们dfs的时候就是枚举其有不确定解的数上选0或1从而推知其他解,由于我们dfs的时候先0后1,虽 ...
- bzoj千题计划187:bzoj1770: [Usaco2009 Nov]lights 燈 (高斯消元解异或方程组+枚举自由元)
http://www.lydsy.com/JudgeOnline/problem.php?id=1770 a[i][j] 表示i对j有影响 高斯消元解异或方程组 然后dfs枚举自由元确定最优解 #in ...
- BZOJ1770 : [Usaco2009 Nov]lights 燈
设$f[i]$表示$i$点按下开关后会影响到的点的集合,用二进制表示. 不妨设$n$为偶数,令$m=\frac{n}{2}$,对于前一半暴力$2^m$搜索所有方案,用map维护每种集合的最小代价. 对 ...
随机推荐
- angular的跨域(angular百度下拉提示模拟)和angular选项卡
1.angular中$http的服务: $http.get(url,{params:{参数}}).success().error(); $http.post(url,{params:{参数}}).su ...
- http缓存相关头
https://mp.weixin.qq.com/s/qOMO0LIdA47j3RjhbCWUEQ 这里说的一下我对http控制客户端缓存的头的理解. 在请求一个静态文件的时候(图片,css,js)等 ...
- Python 字符串
Python访问字符串中的值 Python不支持单字符类型,单字符也在Python也是作为一个字符串使用. Python访问子字符串,可以使用方括号来截取字符串,如下实例: #!/usr/bin/py ...
- bash shell
Linux的shell 与windows只有一种批处理脚本不同,由于早年的Unix年代,发展者众,出现了各种不同的distribution,因此也随着不同的distribution出现了各自的shel ...
- JDBC连接各种数据库的地址名称
oracle driverClass:oracle.jdbc.driver.OracleDriver url:jdbc:oracle:thin:@127.0.0.1:1521:dbname ...
- html盒子模型
http://www.cnblogs.com/sunyunh/archive/2012/09/01/2666841.html
- 【转载】浅谈HTTP中Get与Post的区别
[转载]http://www.cnblogs.com/hyddd/ Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE.URL全称是资源描述符,我们 ...
- Linux下常用SVN命令
1.将文件checkout到本地目录 svn checkout path(path是服务器上的目录) 例如:svn checkout svn://192.168.1.1/pro/domain --u ...
- 由Memcached升级到 Couchbase的 Java 客户端的过程记录(二)
Shiro提供了类似于Spring的Cache抽象,即Shiro本身不实现Cache,但是对Cache进行了又抽象,方便更换不同的底层Cache实现. shiro对缓存的支持 shiro并没有实现缓存 ...
- Python笔记(1)变量与表达式
列表list list是用的最多的类型 可以count计数 可嵌套,多钟类型并存 支持 + * a = [1,2,3] a_ref = a a_copy = a[:] 引用,a变化a_ref也变化 指 ...