Description

貝希和她的閨密們在她們的牛棚中玩遊戲。但是天不從人願,突然,牛棚的電源跳閘了,所有 的燈都被關閉了。貝希是一個很膽小的女生,在伸手不見拇指的無盡的黑暗中,她感到驚恐, 痛苦與絕望。她希望您能夠幫幫她,把所有的燈都給重新開起來!她才能繼續快樂地跟她的閨 密們繼續玩遊戲! 牛棚中一共有N(1 <= N <= 35)盞燈,編號為1到N。這些燈被置於一個非常複雜的網絡之 中。有M(1 <= M <= 595)條很神奇的無向邊,每條邊連接兩盞燈。 每盞燈上面都帶有一個開關。當按下某一盞燈的開關的時候,這盞燈本身,還有所有有邊連向 這盞燈的燈的狀態都會被改變。狀態改變指的是:當一盞燈是開著的時候,這盞燈被關掉;當 一盞燈是關著的時候,這盞燈被打開。 問最少要按下多少個開關,才能把所有的燈都給重新打開。 數據保證至少有一種按開關的方案,使得所有的燈都被重新打開。

Input

*第一行:兩個空格隔開的整數:N和M。 *第二到第M+1行:每一行有兩個由空格隔開的整數,表示兩盞燈被一條無向邊連接在一起。 沒有一條邊會出現兩次。

Output

第一行:一個單獨的整數,表示要把所有的燈都打開時,最少需要按下的開關的數目。

Sample Input

5 6
1 2
1 3
4 2
3 4
2 5
5 3

輸入細節:

一共有五盞燈。燈1、燈4和燈5都連接著燈2和燈3。

Sample Output

3

輸出細節:

按下在燈1、燈4和燈5上面的開關。

陡然发现这题用的繁体字。。。说呢怎么这么黑。。。

嗯、这题是用异或方程。
初始一个n*(n+1)的矩阵。
第i行表示第i盏灯的情况,其中的第j位表示第j盏灯的状态变化是否会对其产生影响。第n+1列表示最终状态与初始状态的异或值(一开是都为1,因为都是从关到开转变了状态)
然后就是果果的高斯消元,我的做法是对于每个a[i,i]把n行都消过去、、不是倒三角。。。如果有唯一解的话终态是一条对角线加一条“虚线”,即第n+1列。
然后进行深搜。枚举每个多解情况的操作。
理论复杂度是2^n。。。不过这个的状态树枯枝败叶各种多啊。。。随便减下都只剩下差不多个树干。。。。
在每层深搜之前判断当前解是否小于当前最优解,否则退出。。。
原来超时的20ms水过。。。

AC CODE
program bzoj_1770;
var a:array[1..40,1..40] of longint;
    ans,tot,n,m:longint;
//===================================================================
procedure init;
var i,x,y:longint;
begin
  readln(n,m);
  for i:=1 to n do a[i,i]:=1;
  for i:=1 to n do a[i,n+1]:=1;
  for i:=1 to m do
  begin
    readln(x,y);
    a[y,x]:=1; a[x,y]:=1;
  end; m:=n+1;
end;
//===================================================================
procedure change(x:longint);
var i,j,tt:longint;
begin
  for i:=x+1 to n do
    if a[i,x]<>0 then
    begin
      for j:=1 to m do
      begin
        tt:=a[x,j]; a[x,j]:=a[i,j]; a[i,j]:=tt;
      end; exit;
    end;
end;
//===================================================================
procedure xiaoyuan;
var i,j,k:longint;
begin
  for i:=1 to n do
  begin
    if a[i,i]=0 then change(i);
    if a[i,i]=0 then continue;
    for j:=1 to n do
    begin
      if j=i then continue;
      if a[j,i]=0 then continue;
      for k:=i to m do
        a[j,k]:=a[j,k] xor a[i,k];
    end;
  end;
end;
//===================================================================
procedure dfs(now:longint);
var i:longint;
begin
  if tot>ans then exit;  //加了这一句就过了、、
  if now=0 then
  begin
    if tot
    exit;
  end;
  if a[now,now]=1 then
  begin
    if a[now,m]=1 then inc(tot);
    dfs(now-1);
    if a[now,m]=1 then dec(tot);
  end else
  begin
    if a[now,m]=1 then exit;
    dfs(now-1);
    for i:=now-1 downto 1 do
      if a[i,now]=1 then a[i,m]:=a[i,m] xor 1;
    inc(tot); dfs(now-1); dec(tot);
    for i:=now-1 downto 1 do
      if a[i,now]=1 then a[i,m]:=a[i,m] xor 1;
  end;
end;
//===================================================================
begin
  assign(input,'1.in'); reset(input);
  init;
  xiaoyuan;
  ans:=maxlongint;
  tot:=0; dfs(n);
  writeln(ans);
end.

bzojnbsp;1770nbsp;[Usaco2009nbsp;Nov]lightsnbsp;…相关推荐

  1. bzoj2059[Usaco2010 Nov]Buying Feed 购买饲料*

    bzoj2059[Usaco2010 Nov]Buying Feed 购买饲料 题意: 约翰开车来到镇上,他要带K吨饲料回家.如果他的车上有X吨饲料,每公里就要花费X^2元,开车D公里就需要D* X^ ...

  2. [BZOJ1724][Usaco2006 Nov]Fence Repair 切割木板

    1724: [Usaco2006 Nov]Fence Repair 切割木板 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 1272  Solved: ...

  3. 1642: [Usaco2007 Nov]Milking Time 挤奶时间(dp)

    1642: [Usaco2007 Nov]Milking Time 挤奶时间 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 935  Solved: 5 ...

  4. NetBeans 时事通讯(刊号 # 124 - Nov 11, 2010)

    现在的 netbeans.org 瞬息万变.为了帮助您快速的获得最新消息,一个由志愿者组成的团队会每周收集与 NetBeans 相关的时事通讯,包括文章,教程,重要事件等等.刊号 # 124 - No ...

  5. Mon Nov 18 01:40:52 CST 2019 WARN: Establishing SSL connection without server's identity verificatio

    今天在写ssh项目的时候,部署tomcat之后出现这样的错误 Mon Nov 18 01:40:52 CST 2019 WARN: Establishing SSL connection withou ...

  6. NetBeans 时事通讯(刊号 # 125 - Nov 17, 2010)

    现在的 netbeans.org 瞬息万变.为了帮助您快速的获得最新消息,一个由志愿者组成的团队会每周收集与 NetBeans 相关的时事通讯,包括文章,教程,重要事件等等.刊号 # 125 - No ...

  7. 1724: [Usaco2006 Nov]Fence Repair 切割木板( 贪心 )

    倒过来看 , 每次总是选择最短的两块木板合并 , 用heap维护 ------------------------------------------------------------------- ...

  8. bzoj1230[Usaco2008 Nov]lites 开关灯*

    bzoj1230[Usaco2008 Nov]lites 开关灯 题意: 一个01序列,初始全部元素为0,两种操作:l到r全部元素取反.询问l到r1的个数.序列长度≤100000,询问个数≤10000 ...

  9. 1707: [Usaco2007 Nov]tanning分配防晒霜

    1707: [Usaco2007 Nov]tanning分配防晒霜 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 548  Solved: 262 [S ...

最新文章

  1. 使用VS.NET2003编写存储过程
  2. 利用Wireshark和OSS的API文档简单实现上传和下载
  3. 参数估计Bayesian方法的困惑点
  4. php服务器队列执行,lnmp php添加队列服务器的配置
  5. Java国际化的简单实现方法
  6. 中邮消费金融签约神策数据 致力最优产品与服务模式
  7. [云炬创业基础笔记]第七张创业资源测试
  8. python strip_Python3 strip()方法
  9. 九、BDB OneToMany
  10. 盘点Linux下19 个有趣的命令!
  11. 最佳的开源云项目有哪些?
  12. qt读oracle时间戳,QT解析时间戳与微秒级精度
  13. Spark源码学习1.6——Executor.scala
  14. Git/mercurial...版本控制分支曲线图解析
  15. 4符号代码_身为程序员我敢跟你打赌100块,这个数学符号你根本不会认不会写...
  16. 2-visio使用与卸载
  17. Android10源码下载和编译(解锁/刷机)
  18. oracle的odac dll,.NET2.0中施用最少的ODAC动态库文件连接Oracle数据库
  19. java 无领导小组面试,无领导小组讨论面试前的准备不包括:( )
  20. JavaWeb项目打包上线简单流程

热门文章

  1. mysql8.0 删除用户_MYSQL8 创建、删除用户和授权、消权操作
  2. Android中探究抖音短视频的动态壁纸功能以及拓展功能使用
  3. 在mac上安装pip3
  4. WASD键控制物体移动
  5. CLOS网络的无阻塞条件
  6. 通过Jmeter找到系统最大并发数
  7. leetcode 310周赛
  8. 怎么样打开Win10启动文件夹
  9. Linux:Nginx总结
  10. 微信小程序实现星星评价效果