★★☆   输入文件:lights.in   输出文件:lights.out   简单对比
                    时间限制:1 s   内存限制:128 MB

【问题描述】

贝希和她的闺密们在她们的牛棚中玩游戏。但是天不从人愿,突然,牛棚的电源跳闸了,所有的灯都被关闭了。贝希是一个很胆小的女生,在伸手不见拇指的无尽的黑暗中,她感到惊恐,痛苦与绝望。她希望您能够帮帮她,把所有的灯都给重新开起来!她才能继续快乐地跟她的闺密们继续玩游戏!

牛棚中一共有N(1 <= N <= 35)盏灯,编号为1到N。这些灯被置于一个非常复杂的网络之中。有M(1 <= M <= 595)条很神奇的无向边,每条边连接两盏灯。

每盏灯上面都带有一个开关。当按下某一盏灯的开关的时候,这盏灯本身,还有所有有边连向这盏灯的灯的状态都会被改变。状态改变指的是:当一盏灯是开着的时候,这盏灯被关掉;当一盏灯是关着的时候,这盏灯被打开。

问最少要按下多少个开关,才能把所有的灯都给重新打开。

数据保证至少有一种按开关的方案,使得所有的灯都被重新打开。

题目名称:lights

输入格式:

*第一行:两个空格隔开的整数:N和M。

*第二到第M+1行:每一行有两个由空格隔开的整数,表示两盏灯被一条无向边连接在一起。
没有一条边会出现两次。

样例输入(文件 lights.in):

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

输入细节:

一共有五盏灯。灯1、灯4和灯5都连接着灯2和灯3。

输出格式:

第一行:一个单独的整数,表示要把所有的灯都打开时,最少需要按下的开关的数目。

样例输出(文件 lights.out):

3

输出细节:

按下在灯1、灯4和灯5上面的开关。

题解:

  和poj 1681几乎一样,dfs的不懂的看这。。。

 #include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#include<cmath>
#include<queue>
#include<vector>
using namespace std;
int N,M,ANS;
int a[][];
void gauss(){
for(int i=;i<=N;i++){
int tmp=i;
while(tmp<=N&&a[tmp][i]==) tmp++;
if(tmp>N) continue;
if(tmp!=i){
for(int j=;j<=N+;j++) swap(a[i][j],a[tmp][j]);
}
for(int j=;j<=N;j++){
if(j!=i&&a[j][i]==){
for(int k=;k<=N+;k++) a[j][k]^=a[i][k];
}
}
}
}
int s[],cnt;
void dfs(int x){
if(cnt>=ANS) return;
if(x==){
ANS=min(ANS,cnt);
return;
}
if(a[x][x]){
int num=a[x][N+];
for(int i=x+;i<=N;i++)
if(a[x][i])
num=num^s[i];
s[x]=num;
if(num==) cnt++;
dfs(x-);
if(num==) cnt--;
}
if(!a[x][x]){
s[x]=;
dfs(x-); s[x]=; cnt++;
dfs(x-); cnt--;
}
}
int main(){
//freopen("lights.in","r",stdin);
//freopen("lights.out","w",stdout);
scanf("%d%d",&N,&M);
for(int i=;i<=N;i++) a[i][i]=;
for(int i=,u,v;i<=M;i++){
scanf("%d%d",&u,&v);
a[u][v]=a[v][u]=;
}
for(int i=;i<=N;i++) a[i][N+]=;
gauss();
ANS=<<;
dfs(N);
printf("%d",ANS);
return ;
}

cogs 539. 牛棚的灯的更多相关文章

  1. 高斯消元法求解异或方程组: cojs.tk 539.//BZOJ 1770 牛棚的灯

    高斯消元求解异或方程组: 比较不错的一篇文章:http://blog.sina.com.cn/s/blog_51cea4040100g7hl.html cojs.tk  539. 牛棚的灯 ★★☆   ...

  2. 洛谷P2845-Switching on the Lights 开关灯

    Problem 洛谷P2845-Switching on the Lights 开关灯 Accept: 154    Submit: 499Time Limit: 1000 mSec    Memor ...

  3. P2845 [USACO15DEC]Switching on the Lights 开关灯

    题目背景 来源:usaco-2015-dec Farm John 最近新建了一批巨大的牛棚.这些牛棚构成了一个N*N的矩形网络.(1<n<100) 然而bessie十分怕黑,他想计算可以把 ...

  4. 搜索【洛谷P2845】 [USACO15DEC]Switching on the Lights 开关灯

    P2845 [USACO15DEC]Switching on the Lights 开关灯 题目背景 来源:usaco-2015-dec Farm John 最近新建了一批巨大的牛棚.这些牛棚构成了一 ...

  5. luogu P2828 Switching on the Lights(开关灯)

    题目背景 来源:usaco-2015-dec Farm John 最近新建了一批巨大的牛棚.这些牛棚构成了一个N*N的矩形网络.(1<n<100) 然而bessie十分怕黑,他想计算可以把 ...

  6. 洛谷P2828 Switching on the Lights(开关灯)

    P2828 Switching on the Lights(开关灯) 题目背景 来源:usaco-2015-dec Farm John 最近新建了一批巨大的牛棚.这些牛棚构成了一个N*N的矩形网络.( ...

  7. Luogu P2845 [USACO15DEC]Switching on the Lights 开关灯(bfs)

    P2845 [USACO15DEC]Switching on the Lights 开关灯 题意 题目背景 来源:usaco-2015-dec \(Farm\ John\)最近新建了一批巨大的牛棚.这 ...

  8. P2962 [USACO09NOV]灯Lights

    贝希和她的闺密们在她们的牛棚中玩游戏.但是天不从人愿,突然,牛棚的电源跳闸了,所有的灯都被关闭了.贝希是一个很胆小的女生,在伸手不见拇指的无尽的黑暗中,她感到惊恐,痛苦与绝望.她希望您能够帮帮她,把所 ...

  9. P2962 [USACO09NOV]灯Lights 对抗搜索

    \(\color{#0066ff}{题目描述}\) 贝希和她的闺密们在她们的牛棚中玩游戏.但是天不从人愿,突然,牛棚的电源跳闸了,所有的灯都被关闭了.贝希是一个很胆小的女生,在伸手不见拇指的无尽的黑暗 ...

随机推荐

  1. Groovy操作符

    Groovy操作符 这一篇简单介绍一下Groovy中的操作符. 算数操作符 groovy支持java中的所有操作符,下面只列举一些groovy特有的: ** power运算符,也叫次方. assert ...

  2. Java23种设计模式学习笔记【目录总贴】

    创建型模式:关注对象的创建过程 1.单例​模式:保证一个类只有一个实例,并且提供一个访问该实例的全局访问点 主要: 饿汉式(线程安全,调用效率高,但是不能延时加载) 懒汉式(线程安全,调用效率不高,但 ...

  3. HDU2855—Fibonacci Check-up

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2855 题目意思:求一个式子g[n]=∑C(n,k)*f[k],n很大,很明显是一个矩阵快速幂.可以打表 ...

  4. jQuery中animate设置属性的一个问题

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. 新团建立时间 timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

    w 不根据当前时间戳更新. `wtime` timestamp NULL DEFAULT CURRENT_TIMESTAMP,

  6. Python中的推导式(列表推导式、字典推导式、集合推导式)

    推导式comprehensions(又称解析式),是Python的一种独有特性.推导式是可以从一个数据序列构建另一个新的数据序列的结构体. 共有三种推导,在Python2和3中都有支持: 列表(lis ...

  7. awk经常使用字符串处理函数

    gsub(regexp, replacement [, target]) Search target for all of the longest, leftmost, nonoverlapping  ...

  8. 如何进入单用户模式(CentOS6.9)

    环境: CentOS6.9_64位 步骤1 虚拟机此时处在关机模式,开机后在下图界面4秒倒计时结束前,按 e 步骤2 此时会进入下图所示界面,接着按一下 e 步骤3 此时会进入下图所示的界面,选择第2 ...

  9. JAVA中的反射机制 (转)

    反射,当时经常听他们说,自己也看过一些资料,也可能在设计模式中使用过,但是感觉对它没有一个较深入的了解,这次重新学习了一下,感觉还行吧! 一,先看一下反射的概念: 主要是指程序可以访问,检测和修改它本 ...

  10. vue的ref与$refs

    一. ref使用在父组件上 父组件html: <information ref='information'></information> import information ...