Background

由于今天是星期一,闹钟准时响了,由于小奔太困了,所以她想关停闹钟。

Description

可是,他的闹钟电路太复杂了,有很多个开关,每个开关都连着其他开关,其他开关又连着更多的开关,当且仅当所有开关都关闭时,闹钟才会停止响铃,(初始时默认每个开关都开着的),她该如何是好呢?

请你帮小奔求出最少开关次数,如果无论如何都不能关闭闹钟,请输出‘Change an alarm clock,please!’

Input

共有N+1行

第一行一个数N(1≤N≤20),表示有N个开关,从第2行起的第i行表示第i个闹钟开关。

以后N行,每行第一个数为M(0≤M≤N-1),表示第i个闹钟开关的直接关联开关个数。(由直接关联开关所关联的直接关联开关,自然就是第i个闹钟间接关联开关啦,当打开第i个开关时,只有直接关联,间接关联以及第i个开关才会起作用。),之后M个数,表示第i个闹钟直接关联开关的标号。(如果M为0则表示没有任何关联)

Output

一个数ans,表示最少按开关次数,如果无法关闭,输出‘Change an alarm clock,please!’

其实没有看题.多亏ZAGER概括题意

给你一些开关,这些开关能控制其他开关,而这些开关又能控制其他开关,总共有三层.

直接暴力搜索,判断能否使得所有闹钟被关掉.

注意重边和自环的影响.

代码

#include<cstdio>
#include<cctype>
#include<iostream>
#define R register
using namespace std;
inline void in(int &x)
{
int f=1;x=0;char s=getchar();
while(!isdigit(s)){if(s=='-')f=-1;s=getchar();}
while(isdigit(s)){x=x*10+s-'0';s=getchar();}
x*=f;
}
bool ok[25][25],open[25];
int head[108],tot,ans=2147483644,n;
struct cod{int u,v;}edge[1088];
inline bool check()
{
for(R int i=1;i<=n;i++)
if(open[i])return false;
return true;
}
inline void add(int x,int y)
{
edge[++tot].u=head[x];
edge[tot].v=y;
head[x]=tot;
}
void dfs(int dep,int now)
{
if(now>=ans)return;
if(dep>n)
{
if(check())
ans=min(ans,now);
return;
}
dfs(dep+1,now);
open[dep]^=1;
for(R int i=head[dep];i;i=edge[i].u)
{
open[edge[i].v]^=1;
for(R int j=head[edge[i].v];j;j=edge[j].u)
open[edge[j].v]^=1;
}
dfs(dep+1,now+1);
open[dep]^=1;
for(R int i=head[dep];i;i=edge[i].u)
{
open[edge[i].v]^=1;
for(R int j=head[edge[i].v];j;j=edge[j].u)
open[edge[j].v]^=1;
} }
int main()
{
in(n);
for(R int i=1,m;i<=n;i++)
{
in(m);open[i]=true;
for(R int j=1,x;j<=m;j++)
in(x),ok[i][x]=true;
}
for(R int i=1;i<=n;i++)
for(R int j=1;j<=n;j++)
if(ok[i][j] and i!=j)
add(i,j);
dfs(1,0);
if(ans!=2147483644)printf("%d",ans);
else puts("Change an alarm clock,please!");
}

Dfs【p4906】小奔关闹钟的更多相关文章

  1. P4906 小奔关闹钟

    题目背景 由于今天是星期一,闹钟准时响了,由于小奔太困了,所以她想关停闹钟. 题目描述 可是,他的闹钟电路太复杂了,有很多个开关,每个开关都连着其他开关,其他开关又连着更多的开关,当且仅当所有开关都关 ...

  2. 比赛:小奔的方案 solution

    题目 题目背景 有一个著名的题目: 五个海盗抢到了100个金币,每一颗都一样的大小和价值连城. 他们决定这么分: 1.抽签决定自己的号码 ------ [1.2.3.4.5] 2.首先,由1号提出分配 ...

  3. 比赛:小奔与不等四边形solution

    题目: 题目背景 有这样一道经典的数学题:已知一个四边形的边长是四个连续的正整数,求证这个四边形的面积的最大值不为整数.小奔轻松地证明了这个问题,现在问题来了,大奔要求小奔以最快的速度算出给定边长的四 ...

  4. 洛谷P4907【CYH-01】小奔的国庆练习赛 :$A$换$B$ $problem$(DFS,剪枝)

    洛谷题目传送门 顺便提一下题意有一个地方不太清楚,就是如果输出No还要输出最少需要添加多少张牌才能满足要求.蒟蒻考完以后发现四个点Too short on line 2... 比较需要技巧的搜索 既然 ...

  5. 【CYH-01】小奔的国庆练习赛:赛后标程

    前排鸣谢@找寻 大佬 emm-由于头一次举办公开赛所以--准备不是很充分,所以说题解也没有备好,在这里表示歉意. 欢迎大家来发布题解,在此我们可以提供AC代码,供大家参考. T1 解析:这一题可能栈溢 ...

  6. [ZOJ 1008]Gnome Tetravex (dfs搜索 + 小优化)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1008 题目大意:给你n*n的矩阵,每个格子里有4个三角形,分别是 ...

  7. hdu 2821 学习一点dfs的小技巧吧。。 还是自己太弱了

    #include<iostream> #include<cstdio> #include<cstring> using namespace std; int r,c ...

  8. 比赛:小奔的矩形solution

    分析: 交叉相乘,然后除以最大公因数(为了减少爆常数的可能性std做了两次,数据很大),得到的两个数相加减二就是答案 代码: var p,q,n,m,a,b,i:int64; begin readln ...

  9. 原创跑酷小游戏《Cube Duck Run》 - - 方块鸭快跑

    自从unity5出来才开始关注unity,业余时间尝试做了个小游戏: <方块鸭快跑> (Cube Duck Run) 像素风,3d视角,色彩明快,有无尽和关卡两种模式. 应用连接: goo ...

随机推荐

  1. BZOJ 3224 Tyvj 1728 普通平衡树 | Splay 板子+SPlay详细讲解

    下面给出Splay的实现方法(复杂度证明什么的知道是 nlogn 就可以啦) 首先对于一颗可爱的二叉查找树,是不能保证最坏nlogn的复杂度(可以想象把一个升序序列插入) (二叉查找树保证左子树元素大 ...

  2. COGS1752. [BOI2007]摩基亚Mokia CDQ

    CDQ的板子题 #include<cstdio> #include<cstring> #include<iostream> #include<algorith ...

  3. 创建dll

    在制作dll的时候,如果全局变量不导出,而函数调用中,包含了全局变量,那么会出现全局变量没有值的问题. add.c #pragma once //强制无签名utf-8 #include "a ...

  4. 如何开始创建第一个基于Spring MVC的Controller

    万事开头难,良好的开端是成功的一半! 以下示例怎么开始创建我们的第一个Spring MVC控制器Controller 1.新建一个java类,命名为:MyFirstController,包含以下代码, ...

  5. JavaScript 页面间传值

    转自:http://blog.csdn.net/qq380107165/article/details/7330612 一:JavaScript静态页面值传递之URL篇 能过URL进行传值,把要传递的 ...

  6. xml数据格式

    <?xml version="1.0" encoding="utf-8"?> <country> <name>中国</ ...

  7. 图片和base64编码字符串 互相转换,图片和byte数组互相转换

    图片和base64编码字符串 互相转换 import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; import java.io.*; ...

  8. eclipse 4.2生成wsdl 客户端

    eclipse版本 4.2  64位  ,jdk 1.6   64位 Eclipse Java EE IDE for Web Developers. Version: Juno Service Rel ...

  9. svn备份

    公司的svn体量很大,要是一不小心误删了SVN版本库,就要哭了,所以有了下面的备份脚本 #每个版本库完全备份 #!/bin/bash SOUR_SVN="/var/www/svn" ...

  10. jvm面试必会基本知识

    内存: 堆区 1.new的对象实例  ps:(java堆可以细分为新生代和老年代)(通过-xmx和-xms来实现可扩展) 虚拟机栈 局部变量 本地方法栈 为虚拟机使用的native方法服务 方法区 s ...