【BZOJ】【1770】【Usaco2009 Nov】lights 灯
高斯消元解XOR方程组
一眼看上去是高斯消元解xor方程组……但是不会写……sad
Hzwer啥也没说,还是zyf靠谱……
当多解的时候就需要爆搜枚举自由元的情况,找最优解……
o(︶︿︶)o 唉我还是太弱了
zyf的解释:
inline void dfs(int x)
{
if(tot>=mn)return;//最优性剪枝
if(!x){mn=min(mn,tot);return;}//终点
if(f[x][x])//已被限制是否需要按下
{
int t=f[x][n+];
for2(i,x+,n)if(f[x][i])t^=ans[i];
ans[x]=t;
if(t)tot++;
dfs(x-);//继续深搜
if(t)tot--;//还原,回溯
}
else//自由变量
{
ans[x]=;dfs(x-);//假设不按该灯开关
ans[x]=;tot++;dfs(x-);tot--;//假设按该灯开关
}
}
/**************************************************************
Problem: 1770
User: Tunix
Language: C++
Result: Accepted
Time:4 ms
Memory:1284 kb
****************************************************************/ //BZOJ 1770
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define rep(i,n) for(int i=0;i<n;++i)
#define F(i,j,n) for(int i=j;i<=n;++i)
#define D(i,j,n) for(int i=j;i>=n;--i)
using namespace std;
const int N=;
typedef long long LL;
int n,m,f[N][N],_min=1e7,ans[N],tot; void gauss(){
F(i,,n){
int j=i;
while(j<=n && !f[j][i]) j++;
if(j>n) continue;
if(i!=j) F(k,,n+) swap(f[i][k],f[j][k]);
F(j,,n) if(i!=j && f[j][i])
F(k,,n+) f[j][k]^=f[i][k];
}
}
void dfs(int x){
if(tot>=_min) return;
if(!x){
_min=min(_min,tot);
return;
}
if(f[x][x]){
int t=f[x][n+];
F(i,x+,n)
if(f[x][i]) t^=ans[i];
ans[x]=t;
if(t) tot++;
dfs(x-);
if(t) tot--;
}
else{
ans[x]=; dfs(x-);
ans[x]=; tot++; dfs(x-); tot--;
}
}
int main(){
scanf("%d%d",&n,&m);
F(i,,n) f[i][i]=f[i][n+]=;
int x,y;
F(i,,m){
scanf("%d%d",&x,&y);
f[x][y]=f[y][x]=;
}
gauss();
dfs(n);
printf("%d\n",_min);
return ;
}
【BZOJ】【1770】【Usaco2009 Nov】lights 灯的更多相关文章
- BZOJ 1770: [Usaco2009 Nov]lights 燈( 高斯消元 )
高斯消元解xor方程组...暴搜自由元+最优性剪枝 -------------------------------------------------------------------------- ...
- BZOJ 1770: [Usaco2009 Nov]lights 燈
Description 一个图,对一个点进行操作会改变这个点及其相邻的点的状态,问全部变成黑色至少需要几次.数据保证有解. Sol Meet in middle. 我一开始写个高斯消元,发现有两个点过 ...
- 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 燈
Description 貝希和她的閨密們在她們的牛棚中玩遊戲.但是天不從人願,突然,牛棚的電源跳閘了,所有的燈都被關閉了.貝希是一個很膽小的女生,在伸手不見拇指的無盡的黑暗中,她感到驚恐,痛苦與絕望. ...
- 【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 2017 [Usaco2009 Nov]硬币游戏 动态规划
[Usaco2009 Nov]硬币游戏 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 431 Solved: 240[Submit][Status] ...
- 【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 ...
随机推荐
- 3DES 加解密,对长度不限制
#region 3DES /// <summary> /// 3DES加密 /// </summary> /// <param name="strString& ...
- gulp基础使用总结
gulp 安装 1 检测电脑有没有安装node 执行 $ node -v $ npm -v 如果没有安装的话,可以到https://nodejs.org/en/download/下载安装. 2 全局安 ...
- android 数据库_sql语句总结
表的创建db.execSQL("create table info(_id integer primary key autoincrement,name varchar(20)") ...
- 杭电ACM2076--夹角有多大(题目已修改,注意读题)
杭电ACM2076--夹角有多大(题目已修改,注意读题) http://acm.hdu.edu.cn/showproblem.php?pid=2076 思路很简单.直接贴代码.过程分析有点耗时间. / ...
- Cadence OrCad Allegro SPB 16.6 下载及安装破解指南
Cadence公司的电子设计自动化产品涵盖了电子设计的整个流程,包括系统级设计,功能验证,IC综合及布局布线,模拟.混合信号及射频IC设计,全定制集成电路设计,IC物理验证,PCB设计和硬件仿真建模等 ...
- Spring MVC的启动过程
一.概述 下面一个基本的运用springMVC的的web.xml的配置,这里要注意两个地方,一个是ContextLoadListener,一个是DispatcherServlet.web容器正是通过这 ...
- nginx配置(解释)
- [转]Android在eclipse中的快捷键
1.选中你要加注释的区域,用ctrl+shift+C 会加上//注释2.先把你要注释的东西选中,用shit+ctrl+/ 会加上/* */注释3.要修改在eclispe中的命令的快捷键方式我们只 ...
- WIN10主动推升级,有点意思
不论正与盗,皆推升级,是否一样可用?
- 删除所有表数据的sql语句
EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL' EXEC sp_MSForEachTable 'ALTER TABLE ? ...