参考:https://blog.csdn.net/qq_34564984/article/details/53843777

可能背了假的板子……

对于每个灯建立方程:与它相邻的灯的开关次数的异或和为1

异或高斯消元,然后dfs,遇到自由元就分两种情况走,答案取max,加上最优性剪枝

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
const int N=45;
int n,m,a[N][N],ans[N],mn=1e9,tot;
int read()
{
int r=0,f=1;
char p=getchar();
while(p>'9'||p<'0')
{
if(p=='-')
f=-1;
p=getchar();
}
while(p>='0'&&p<='9')
{
r=r*10+p-48;
p=getchar();
}
return r*f;
}
void gaosi()
{
// for(int i=1;i<=n;i++)
// {
// int now=i;
// for(int j=i+1;j<=n;j++)
// if(abs(a[now][i])<abs(a[j][i]))
// now=j;
// for(int j=i;j<=n+1;j++)
// swap(a[now][j],a[i][j]);
// for(int j=i;j<=n+1;j++)
// a[i][j]/=a[i][i];
// for(int j=i+1;j<=n;j++)
// {
// for(int k=i+1;k<=n+1;k++)
// a[j][k]^=(a[j][i]^a[i][k]);
// a[j][i]=0;
// }
// }
for(int i=1;i<=n;i++)
{
int j=i;
while(j<=n&&!a[j][i])
j++;
if(j>n)
continue;
if(i!=j)
for(int k=1;k<=n+1;k++)
swap(a[i][k],a[j][k]);
for(int j=1;j<=n;j++)
if(i!=j&&a[j][i])
for(int k=1;k<=n+1;k++)
a[j][k]^=a[i][k];
}
}
void dfs(int u)
{
if(tot>=mn)
return;
if(!u)
{
mn=tot;
return;
}
if(a[u][u])
{
int t=a[u][n+1];
for(int i=u+1;i<=n;i++)
if(a[u][i])
t^=ans[i];
ans[u]=t;
if(t)
tot++;
dfs(u-1);
if(t)
tot--;
}
else
{
tot++,ans[u]=1;
dfs(u-1);
tot--,ans[u]=0;
dfs(u-1);
}
}
int main()
{
n=read(),m=read();
for(int i=1;i<=n;i++)
a[i][i]=a[i][n+1]=1;
for(int i=1;i<=m;i++)
{
int x=read(),y=read();
a[x][y]=a[y][x]=1;
}
gaosi();
dfs(n);
printf("%d\n",mn);
return 0;
}

bzoj 1770: [Usaco2009 Nov]lights 燈【高斯消元+dfs】的更多相关文章

  1. BZOJ 1770: [Usaco2009 Nov]lights 燈( 高斯消元 )

    高斯消元解xor方程组...暴搜自由元+最优性剪枝 -------------------------------------------------------------------------- ...

  2. BZOJ 1770: [Usaco2009 Nov]lights 燈 [高斯消元XOR 搜索]

    题意: 经典灯问题,求最少次数 本题数据不水,必须要暴搜自由元的取值啦 想了好久 然而我看到网上的程序都没有用记录now的做法,那样做遇到自由元应该可能会丢解吧...? 我的做法是把自由元保存下来,枚 ...

  3. 【高斯消元】BZOJ 1770: [Usaco2009 Nov]lights 燈

    Description 貝希和她的閨密們在她們的牛棚中玩遊戲.但是天不從人願,突然,牛棚的電源跳閘了,所有的燈都被關閉了.貝希是一個很膽小的女生,在伸手不見拇指的無盡的黑暗中,她感到驚恐,痛苦與絕望. ...

  4. BZOJ 1770: [Usaco2009 Nov]lights 燈

    Description 一个图,对一个点进行操作会改变这个点及其相邻的点的状态,问全部变成黑色至少需要几次.数据保证有解. Sol Meet in middle. 我一开始写个高斯消元,发现有两个点过 ...

  5. BZOJ1770:[USACO]lights 燈(高斯消元,DFS)

    Description 貝希和她的閨密們在她們的牛棚中玩遊戲.但是天不從人願,突然,牛棚的電源跳閘了,所有的燈都被關閉了.貝希是一個很膽小的女生,在伸手不見拇指的無盡的黑暗中,她感到驚恐,痛苦與絕望. ...

  6. 【BZOJ】1770 [Usaco2009 Nov]lights 燈

    [算法]高斯消元-异或方程组 [题解]良心简中题意 首先开关顺序没有意义. 然后就是每个点选或不选使得最后得到全部灯开启. 也就是我们需要一种确定的方案,这种方案使每盏灯都是开启的. 异或中1可以完美 ...

  7. [luoguP2962] [USACO09NOV]灯Lights(高斯消元 + dfs)

    传送门 先进行高斯消元 因为要求最少的开关次数,那么: 对于关键元,我们可以通过带入消元求出, 对于自由元,我们暴力枚举,进行dfs,因为只有开关两种状态,0或1 #include <cmath ...

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

    1770: [Usaco2009 Nov]lights 燈 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1153  Solved: 564[Submi ...

  9. bzoj千题计划187:bzoj1770: [Usaco2009 Nov]lights 燈 (高斯消元解异或方程组+枚举自由元)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1770 a[i][j] 表示i对j有影响 高斯消元解异或方程组 然后dfs枚举自由元确定最优解 #in ...

随机推荐

  1. 字符串类String类的判断功能

    StringDemo.java /* * Object:是类层级结构中的根类,所有的类都直接或间接的继承自该类. * 如果一个方法的形式参数是Object,那么这里我们就可以传递它的任意的子类对象. ...

  2. word 给段落添加背景色

    word 2007 单击"页面布局"选项卡->单击"页面背景"一栏中的"页面边框"->(弹出边框与底纹对话框)->点击底纹 ...

  3. js给<img>的src赋值问题

    原生JS:document.getElementById("imageId").src = "xxxx.jpg";jquery:$("#imageId ...

  4. POJ 1741 Tree【Tree,点分治】

    给一棵边带权树,问两点之间的距离小于等于K的点对有多少个. 模板题:就是不断找树的重心,然后分开了,分治,至少分成两半,就是上限为log 然后一起统计就ok了 #include<iostream ...

  5. android源码mm时的编译错误no ruler to make target `out/target/common/obj/JAVA_LIBRARIES/xxxx/javalib.jar', needed by `out/target/common/obj/APPS/xxxx_intermediates/classes-full-debug.jar'. Stop.

    瞧见没有,就因为多了这一个反斜杠,浪费了一下午时间找问题,哭了~~~~

  6. linux程序分析工具

    ldd和nm是Linux下两个非常实用的程序分析工具.ldd是用来分析程序运行时需要依赖的动态链接库的工具,nm是用来查看指定程序中的符号表信息的工具,objdump用来查看源代码与汇编代码,-d只查 ...

  7. SOJ 2818_QQ音速

    [题意]两只手,一次只能用一只手按一个键子(0,1,2,3),给出从i键到j键所需的消耗的体力,求依次按下一系列键子所需最小体力. [分析] 法一:开一个三维数组,分别记录移动到位置及左右手按的键子. ...

  8. Delphi 2007 的重构功能

    Move 移动 1.将选定的静态函数从一个类移动到另一个类 2.将选中的类或接口移动到其他单元 Extract Interface 抽取接口 将选定的函数抽取到一个新的接口中 Extract Supe ...

  9. UVA 567 Risk【floyd】

    题目链接: option=com_onlinejudge&Itemid=8&page=show_problem&problem=508">https://uva ...

  10. 1064 - You have an error in your SQL syntax问题解决

    新建表sql语句例如以下,在navicat for mysql 中执行,报错. CREATE TABLE `t_article`( `bh` bigint(20) NOT NULL PRIMARY K ...