唉,小朋友是比较麻烦的。在一个幼儿园里,老师要上一节游戏课,有N个小朋友要玩游戏,做游戏时要用小皮球,但是幼儿园里只有M个小皮球,而且有些小朋友不喜欢和一些小朋友在一起玩,而只喜欢和另一些小朋友一起玩,比如傻妞只喜欢和傻瓜,傻根,傻蛋们一起玩,傻根又不喜欢和傻蛋一起玩,傻蛋喜欢和傻子一起玩。所以老师只好把他们分组,每个组至少有一个小球可以玩,而且每个组内不会有两个小朋友,相互不喜欢。现在给你这样一个幼儿园里小朋友之间关系的描述,做为老师,是否可以上好这节游戏课。

Input数据有多个case,每个case先输入两个值N(1<=N<=10)和M(1<=M<=10),表示有N个小朋友(从0到N-1标号),和M个小皮球。接着有N行,第i行先输入一个K(0<=K<N),表示第i个小朋友有喜欢一起玩的其他小朋友的个数,然后后面有K个整数,表示K个小朋友的标号(不重复)。如果A喜欢和B一起玩,则B也喜欢和A一起玩,这个数据在输入时保证。两个case之间有空行Output对于每个case,如果老师可以上好课,输出YES,否则NO。Sample Input

3 2
2 1 2
2 2 0
2 0 1

Sample Output

YES

分析:我们可以将这几个小朋友分别分到不同集合中去,,然后判断一个点是不是可以放到一个集合中,这时候就要找到那个集合的根,同时,要确保这个点不与集合里面所有的点冲突,
,通过深搜枚举出所有的可能,判断是否满足题意!
 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=;
int n,m,mapp[maxn][maxn];
int root[maxn];
bool flag; void DFS(int x,int y){/*代表人数,y代表球数*/
if(flag) return ;/*说明找到了解决题意的方案*/
if(y>m) return ;/*说明球数超过了预算*/
if(x==n){/*人数到达了指定要求,并且球数未超标,符合要求*/
flag=true;
return ;
}
for(int i=; i<x; i++ ){
if(root[i]!=i) continue;/*找到根结点*/
bool tag=true;
/*判断x是否可以加入根结点集合*/
for( int j=; j<x; j++ ){
if(root[j]==i&&mapp[j][x]==){
tag=false;
break;
}
}
/*如果x可以加入的话*/
if(tag){
root[x]=i;/*将x加入根节点集合*/
DFS(x+,y);//Case one:人数加1,皮球数不变
}
}
root[x]=x;/*Case two:人数加1,皮球数加1*/
DFS(x+,y+);
} int main(){
while(~scanf("%d%d",&n,&m)){
memset(mapp,,sizeof(mapp));
int k,x;
flag=false;
for(int i=; i<n; i++ ){
root[i]=i;
scanf("%d",&k);
while(k--){
scanf("%d",&x);
mapp[i][x]=;/*将无冲突的点标记为1*/
}
}
DFS(,);
if(m>=n||flag) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
} return ;
}

唉,可爱的小朋友---(DFS)的更多相关文章

  1. HDU 2208 唉,可爱的小朋友(DFS)

    唉,可爱的小朋友 Time Limit: 10000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  2. hdu2208之搜索

    唉,可爱的小朋友 Time Limit: 10000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  3. 【BZOJ-1926】粟粟的书架 二分 + 前缀和 + 主席树

    1926: [Sdoi2010]粟粟的书架 Time Limit: 30 Sec  Memory Limit: 552 MBSubmit: 616  Solved: 238[Submit][Statu ...

  4. 【The final】软件工程实践总结

    软件工程就这么告一段落了,竟然有那么一丢丢的舍不得-- 一.为拖延找的种种借口     [首先声明]以下纯粹是个人吐槽,仅作记录以便日后自己可以回顾一下往昔罢了,可以直接忽略,跳到第二大点:我的拖延之 ...

  5. 【BZOJ1926】粟粟的书架(主席树,前缀和)

    [BZOJ1926]粟粟的书架(主席树,前缀和) 题面 Description 幸福幼儿园 B29 班的粟粟是一个聪明机灵.乖巧可爱的小朋友,她的爱好是画画和读书,尤其喜欢 Thomas H. Co ...

  6. [BZOJ1926][SDOI2010]粟粟的书架

    BZOJ Luogu Description 幸福幼儿园 B29 班的粟粟是一个聪明机灵.乖巧可爱的小朋友,她的爱好是画画和读书,尤其喜欢 Thomas H. Cormen 的文章.粟粟家中有一个 R ...

  7. bzoj1926[Sdoi2010]粟粟的书架 二分 主席树

    1926: [Sdoi2010]粟粟的书架 Time Limit: 30 Sec  Memory Limit: 552 MBSubmit: 1064  Solved: 421[Submit][Stat ...

  8. bzoj 1926: [Sdoi2010]粟粟的书架 (主席树+二分)

    链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1926 题面; 1926: [Sdoi2010]粟粟的书架 Time Limit: 30 Se ...

  9. BZOJ1926[Sdoi2010]粟粟的书架——二分答案+主席树

    题目描述 幸福幼儿园 B29 班的粟粟是一个聪明机灵.乖巧可爱的小朋友,她的爱好是画画和读书,尤其喜欢 Thomas H. Co rmen 的文章.粟粟家中有一个 R行C 列的巨型书架,书架的每一个位 ...

随机推荐

  1. grid - 通过网格线名称设置网格项目位置

    使用网格线名称设置网格项目位置和使用网格线号码设置网格项目位置类似. 1.引用网格线名称的时候不应该带方括号 <view class="grid"> <view ...

  2. Google Guava Stopwatch(计时器)

    Stopwatch stopwatch =newStopwatch().start(); //do something test for(int i =0; i <10000; i++){ } ...

  3. 单片机成长之路(avr基础篇)- 003 AVR单片机的BOOT区

    BOOT区的由来基于一个简单的道理,即单片机的程序是保存在FLASH中的,要运行程序就必须不停的访问FLASH存储器.对于一般的FLASH存储器,数据的写入需要一定的时间来完成,在数据写入完成之前,存 ...

  4. mycat偶尔会出现JVM报错double free or corruption并崩溃退出

    mycat偶尔会出现JVM报错double free or corruption并崩溃退出 没有复杂的sql,也没有大量的io INFO | jvm | // :: | *** Error in `j ...

  5. Docker 国内仓库和镜像

    Docker 国内仓库和镜像 由于网络原因,我们在pull Image 的时候,从Docker Hub上下载会很慢...所以,国内的Docker爱好者们就添加了一些国内的镜像(mirror),方便大家 ...

  6. mybatis 中一对多、多对一、多对多、父子继承关系

    mybatis 中处理一对多.多对一.多对多.父子继承关系的有关键词:association .collection .discriminator id – 一个 ID 结果:标记出作为 ID 的结果 ...

  7. lsb_release command not found

    Linux里的lsb_release命令用来查看当前系统的发行版信 息(prints certain LSB (Linux Standard Base) and Distribution inform ...

  8. 创建一个Django项目的基本步骤

    创建一个Django 的常规步骤 1.寻找一个磁盘目录,比如 e: 2.django-admin startproject ops 3.cd ops 4.python manage.py starta ...

  9. Ubuntu安装Sqlite报错:No module named 'ConfigParser'

    安装命令:`sudo apt install sqlite` 原因,我把系统默认的python版本改为了python3 改为python2即可,用update-alternatives命令,见此文(方 ...

  10. 每天学习一个命令:find 查找文件

    查找的动作在平时使用的频率也还是很高的,所以知道并用好 find 这个命令也很重要.find 命令顾名思义,就是搜索特定文件夹内的文件. 基本使用 最基本的使用 find [path] [expres ...