BZOJ 1770: [Usaco2009 Nov]lights 燈 [高斯消元XOR 搜索]
题意:
经典灯问题,求最少次数
本题数据不水,必须要暴搜自由元的取值啦
想了好久
然而我看到网上的程序都没有用记录now的做法,那样做遇到自由元应该可能会丢解吧...?
我的做法是把自由元保存下来,枚举的时候只枚举自由元
但这样没法最优性剪枝了
于是枚举的时候还是从n到1枚举,到i时如果i是主元这时候i的值已经可以算出来了,这样就可以最优性剪枝了
但注意主元i你不能用i这个方程,而要保存pivot[i]为i用了哪个方程
然后一个伪贪心策略是自由元先搜0
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <bitset>
using namespace std;
const int N=,INF=1e9;
inline int read(){
char c=getchar();int x=,f=;
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
}
int n,m,u,v;
bitset<N> a[N];
int fe[N],now,pivot[N];
void Gauss(){
now=;
for(int i=;i<=n;i++){
int j=now;//printf("hi %d %d %d\n",i,now,a[now][i]==1);
while(j<=n&&!a[j][i]) j++;
if(j==n+) {fe[++fe[]]=i;continue;}
if(j!=now) swap(a[now],a[j]);
for(int j=;j<=n;j++)
if(j!=now&&a[j][i]) a[j]^=a[now];
pivot[i]=now;//printf("pivot %d\n",i);
now++;
}
}
int val[N],tot,ans=INF;
void pri(){
puts("free");
for(int i=;i<=fe[];i++) printf("fe %d %d %d\n",i,fe[i],val[i]);
puts("end");
}
int fir=;
void dfs(int d){
//printf("dfs %d %d\n",d,tot);
if(tot>=ans) return;
if(d==) ans=min(ans,tot);//if(fir==1) printf("tot %d\n",tot),pri(),fir=0;}
else if(pivot[d]){//printf("d %d\n",d);
int i=pivot[d];
int _=a[i][n+];
for(int j=;j<=fe[];j++)
if(a[i][fe[j]]) _^=val[fe[j]];
tot+=_;
dfs(d-);
tot-=_;
}else{
val[d]=;
dfs(d-);
val[d]=; tot++;
dfs(d-);
tot--;
}
}
int main(){
//freopen("in","r",stdin);
n=read();m=read();
for(int i=;i<=m;i++) u=read(),v=read(),a[u][v]=a[v][u]=;
for(int i=;i<=n;i++) a[i][n+]=a[i][i]=;
Gauss();
//for(int i=1;i<=n;i++) printf("a %d %d\n",i,a[i][n+1]==1);
//for(int i=1;i<=fe[0];i++) printf("fe %d %d\n",i,fe[i]);
dfs(n);
printf("%d",ans);
}
BZOJ 1770: [Usaco2009 Nov]lights 燈 [高斯消元XOR 搜索]的更多相关文章
- BZOJ 1770: [Usaco2009 Nov]lights 燈( 高斯消元 )
高斯消元解xor方程组...暴搜自由元+最优性剪枝 -------------------------------------------------------------------------- ...
- 【高斯消元】BZOJ 1770: [Usaco2009 Nov]lights 燈
Description 貝希和她的閨密們在她們的牛棚中玩遊戲.但是天不從人願,突然,牛棚的電源跳閘了,所有的燈都被關閉了.貝希是一個很膽小的女生,在伸手不見拇指的無盡的黑暗中,她感到驚恐,痛苦與絕望. ...
- bzoj 1770: [Usaco2009 Nov]lights 燈【高斯消元+dfs】
参考:https://blog.csdn.net/qq_34564984/article/details/53843777 可能背了假的板子-- 对于每个灯建立方程:与它相邻的灯的开关次数的异或和为1 ...
- BZOJ 1770: [Usaco2009 Nov]lights 燈
Description 一个图,对一个点进行操作会改变这个点及其相邻的点的状态,问全部变成黑色至少需要几次.数据保证有解. Sol Meet in middle. 我一开始写个高斯消元,发现有两个点过 ...
- 【BZOJ】1770 [Usaco2009 Nov]lights 燈
[算法]高斯消元-异或方程组 [题解]良心简中题意 首先开关顺序没有意义. 然后就是每个点选或不选使得最后得到全部灯开启. 也就是我们需要一种确定的方案,这种方案使每盏灯都是开启的. 异或中1可以完美 ...
- BZOJ1770:[USACO]lights 燈(高斯消元,DFS)
Description 貝希和她的閨密們在她們的牛棚中玩遊戲.但是天不從人願,突然,牛棚的電源跳閘了,所有的燈都被關閉了.貝希是一個很膽小的女生,在伸手不見拇指的無盡的黑暗中,她感到驚恐,痛苦與絕望. ...
- BZOJ 3105: [cqoi2013]新Nim游戏 [高斯消元XOR 线性基]
以后我也要用传送门! 题意:一些数,选择一个权值最大的异或和不为0的集合 终于有点明白线性基是什么了...等会再整理 求一个权值最大的线性无关子集 线性无关子集满足拟阵的性质,贪心选择权值最大的,用高 ...
- BZOJ 1923: [Sdoi2010]外星千足虫 [高斯消元XOR]
1923: [Sdoi2010]外星千足虫 对于 100%的数据,满足 N≤1,000,M≤2,000. 裸高斯消元解异或方程组 给定方程顺序要求用从上到下最少的方程,那么找主元时记录一下最远找到哪个 ...
- POJ1222 EXTENDED LIGHTS OUT 高斯消元 XOR方程组
http://poj.org/problem?id=1222 在学校oj用搜索写了一次,这次写高斯消元,haoi现场裸xor方程消元没写出来,真实zz. #include<iostream> ...
随机推荐
- linux中mv命令使用详解
mv命令是move的缩写,可以用来移动文件或者将文件改名(move (rename) files),是Linux系统下常用的命令,经常用来备份文件或者目录. 1.命令格式: mv [选项] 源文件或目 ...
- Myeclipse2014 已有项目更换JDK
原先项目使用JDK是1.7,今天项目加入了一个新包,只支持JAVA8,让我们都升级一下本地的JDK,我突然发现我还没有在myeclipse上升级过JDK呢.捣鼓了一下,也不难,记录一下. 1.下载ja ...
- [20160711][在Windows下调用neven链接库]
相关说明 这篇文档是接前篇[20160711][neven代码移植Windows]和[20160711][VS2012配置OpenCV2.4.9]下完成,首先需要通过篇文档编译出neven动态链接库和 ...
- 利用nginx 虚拟主机、请求转发实现不同端口web访问
一个服务器上挂一个网站实在是有点浪费:一个服务器上可以放多个网站:可以开启nginx的虚拟主机功能:利用访问的路径或者域名不同访问不同的文件夹:例如: 1.一台服务器上放多个网站使用nginx的配置文 ...
- mysql之repair table 修复表札记
REPAIR [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name[,tbl_name] ... [QUICK] [EXTENDED] [USE_FRM] REP ...
- php 抽奖概率 随机数
<?php $prize_arr = array( '0' => array('id' => 1, 'title' => 'iphone5s', 'v' => 5), ' ...
- java.lang.reflect.InvocationTargetException
java.lang.reflect.InvocationTargetException是什么情况?java.lang.reflect.InvocationTargetExceptionat sun.r ...
- MYBATIS异常:INVALID BOUND STATEMENT
1.mapper.xml中namespaces错误(***) 2.方法不存在 3.方法返回值错误
- mysql数据库管理工具navicat for mysql怎么用
mysql数据库管理工具navicat for mysql,对于不怎么喜欢图形界面或者不太方便使用SQL的时候.我们可以通过用这个图形界面数据库管理工具来管理mysql,本经验咗嚛就简单介绍一下怎么用 ...
- Python3基础知识
1.查看关键字 Python3查看关键字要先导入模块keyword,然后运用keyword的属性kwlist获取 >>> import keyword>>> key ...