Dfs【p4906】小奔关闹钟
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】小奔关闹钟的更多相关文章
- P4906 小奔关闹钟
题目背景 由于今天是星期一,闹钟准时响了,由于小奔太困了,所以她想关停闹钟. 题目描述 可是,他的闹钟电路太复杂了,有很多个开关,每个开关都连着其他开关,其他开关又连着更多的开关,当且仅当所有开关都关 ...
- 比赛:小奔的方案 solution
题目 题目背景 有一个著名的题目: 五个海盗抢到了100个金币,每一颗都一样的大小和价值连城. 他们决定这么分: 1.抽签决定自己的号码 ------ [1.2.3.4.5] 2.首先,由1号提出分配 ...
- 比赛:小奔与不等四边形solution
题目: 题目背景 有这样一道经典的数学题:已知一个四边形的边长是四个连续的正整数,求证这个四边形的面积的最大值不为整数.小奔轻松地证明了这个问题,现在问题来了,大奔要求小奔以最快的速度算出给定边长的四 ...
- 洛谷P4907【CYH-01】小奔的国庆练习赛 :$A$换$B$ $problem$(DFS,剪枝)
洛谷题目传送门 顺便提一下题意有一个地方不太清楚,就是如果输出No还要输出最少需要添加多少张牌才能满足要求.蒟蒻考完以后发现四个点Too short on line 2... 比较需要技巧的搜索 既然 ...
- 【CYH-01】小奔的国庆练习赛:赛后标程
前排鸣谢@找寻 大佬 emm-由于头一次举办公开赛所以--准备不是很充分,所以说题解也没有备好,在这里表示歉意. 欢迎大家来发布题解,在此我们可以提供AC代码,供大家参考. T1 解析:这一题可能栈溢 ...
- [ZOJ 1008]Gnome Tetravex (dfs搜索 + 小优化)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1008 题目大意:给你n*n的矩阵,每个格子里有4个三角形,分别是 ...
- hdu 2821 学习一点dfs的小技巧吧。。 还是自己太弱了
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int r,c ...
- 比赛:小奔的矩形solution
分析: 交叉相乘,然后除以最大公因数(为了减少爆常数的可能性std做了两次,数据很大),得到的两个数相加减二就是答案 代码: var p,q,n,m,a,b,i:int64; begin readln ...
- 原创跑酷小游戏《Cube Duck Run》 - - 方块鸭快跑
自从unity5出来才开始关注unity,业余时间尝试做了个小游戏: <方块鸭快跑> (Cube Duck Run) 像素风,3d视角,色彩明快,有无尽和关卡两种模式. 应用连接: goo ...
随机推荐
- 判断当前系统当前浏览器是否安装启用 Adobe Flash Player,检查在chrome中的状态
一.判断当前所在系统 let sUserAgent = navigator.userAgent;let isWin = (navigator.platform == "Win32" ...
- 打造适合日常使用的ubuntu,以ubuntu 16.04.1 LTS为例(不涉及版本)
因为调试些程序需要用到ubuntu,又不喜欢虚拟机,因此装了双系统,在这过程中因为各种原因ubuntu来回安装过好多次,每次安装到用得爽都要捣鼓很久,也算稍微有点经验心得,将ubuntu调教的过程写在 ...
- java 构造函数问题
1.构造函数什么时候被调用,被谁调用? 转摘:http://bbs.csdn.net/topics/350231037 当然,只有在NEW的时候,才会真正的创建这个对象,只有在创建时才会调用该类的构造 ...
- vue入门知识
vue的特点在于:响应的数据绑定.组合的视图组件. vue的文件,分成三个部分<template>html模板</template> <script>js< ...
- 我自己的python开发环境
1.开发工具 eclipse 所有的版本下载: https://www.eclipse.org/downloads/index-packages.php , 我下载的是比较低的版本:https://w ...
- nginx解决超长请求串(413 request Entity too Large错误解决办法)
<div class="hide-article-box text-center" style="display: block;"> <a c ...
- 【HDU3853】LOOPS [期望DP]
LOOPS Time Limit: 5 Sec Memory Limit: 64 MB[Submit][Status][Discuss] Description Akemi Homura is a ...
- 鼠标DPI和液晶显示器分辨率的关系
鼠标DPI和液晶显示器分辨率的关系 说起鼠标,有两个性能指标是我们不能忽略的.一是游戏玩家相当熟悉的扫描率(单位:Frames Per Second),二是我们今天要和大家探讨的鼠标的分辨率(单位:D ...
- 一致性hash与CRUSH算法总结
相同之处:都解决了数据缓存系统中数据如何存储与路由. 不同之处:区别在于虚拟节点和物理节点的映射办法不同 由于一般的哈希函数返回一个int(32bit)型的hashCode.因此,可以将该哈希函数能够 ...
- HDU1385 (Floyd记录路径)
Minimum Transport Cost Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/O ...