参考: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. hihoCoder#1094 Lost in the City

    原题地址 限时10s,所以不用考虑什么算法了,暴力吧 分别按照3x3视野的四个方向去地图上匹配,把符合的地点标记出来,最后统一按照从上到下,从左到右的顺序输出. 代码: #include <io ...

  2. Network(poj 3694)

    题意:一个无向图可以有重边,下面q个操作,每次在两个点间连接一条有向边,每次连接后整个无向图还剩下多少桥(注意是要考虑之前连了的边,每次回答是在上一次的基础之上) /* tarjan+LCA 先用ta ...

  3. 桐桐的糖果计划(vijos 1325)

    背景 桐桐是一个快乐的小朋友,他生活中有许多许多好玩的事,让我们一起来看看吧…… 描述 桐桐很喜欢吃棒棒糖.他家处在一大堆糖果店的附近. 但是,他们家的区域经常出现塞车.塞人等情况,这导致他不得不等到 ...

  4. EasyUI单击行数据时动态编写editor

    $.extend($.fn.treegrid.methods, { addEditor: function (jq, param) { if (param instanceof Array) { $. ...

  5. 使用GSON解析JSON文件

    package com.pingyijinren.test; /** * Created by Administrator on 2016/5/19 0019. */ public class App ...

  6. CentOS7使用mount命令来挂载CDROM

    https://blog.csdn.net/testcs_dn/article/details/41448557

  7. 前端自动化测试工具--使用karma进行javascript单元测试(转)

    Karma+Jasmine+PhantomJS组合的前端javascript单元测试工具. 1.介绍 Karma是由Google团队开发的一套前端测试运行框架,karma会启动一个web服务器,将js ...

  8. 【转】c++中placement new操作符

    new:指我们在C++里通常用到的运算符,比如A* a = new A;  对于new来说,有new和::new之分,前者位于std operator new():指对new的重载形式,它是一个函数, ...

  9. RelativeLayout不能居中的解决的方法

    在LinearLayout中有个让元素居中的办法就是.比方在LinearLayout里有个TextView.设置TextView的gravity能够让其居中. 而在Realative里设置这个不起作用 ...

  10. android中单元測试中的断言assert的使用与扩展

    首先看一组对照,比方说我们要測试的结果是一个Linearlaout AssertJ Android: assertThat(layout).isVisible() .isVertical() .has ...