唉,可爱的小朋友

Time Limit: 10000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 819    Accepted Submission(s): 220

Problem Description
唉,小朋友是比较麻烦的。在一个幼儿园里,老师要上一节游戏课,有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
Author
wangye
Recommend
wangye
这道题,原来不是像网上某些题解说的那样是强连通。(例如当1和2可以玩,不可以和3玩。但2可以和3玩,这样情况如果是用强连通,那样这3个人都是在一个棵里面。)神牛说是K SAT算法(属于NP算法)。所以用暴力是比较好的。题目数据那么小。

思路:让每一个人都分别属于一个不同的集合。然后判断一个点可不可以放入一个集合里,这时候要找到那个集合的根,同时,要确保这个点不与集合里面的所有点有冲突。同时,一个点可能可以放入多个集合中,那样通过一个深搜,那样就可以枚举出所有的可能,再通过一个判断,就可以知道是否有满足题意的点。
#include<iostream>
#include<cstdio>
#include<cstring>using namespace std;int n,m,map[20][20];
int root[20],flag;void DFS(int x,int y){  //x代表人数  y代表球数if(flag)    //找到满足题意的方案return ;if(y>m)     //需要的球超出了预算return ;if(x==n){   //人数达到了要求,且这时候球的数量一定在预算内,找到了可行方案flag=1;return ;}for(int i=0;i<x;i++){if(root[i]!=i)  //找一个集合的根continue;int tag=1;for(int j=i;j<x && tag;j++) //判断该点是否可以放入到该集合内if(root[j]==i)tag=map[j][x];if(tag){    //tag为1的时候,则说明这个点可以放到该集合内root[x]=i;  //将这个点指向根iDFS(x+1,y); //人数加1,进入下一个递归root[x]=x;  //将该点还原,以找到下一个该点的可能落脚点,以确保可以考虑到所有的可能
        }}DFS(x+1,y+1);   //将这个点分到一个新的集合里
}int main(){//freopen("input.txt","r",stdin);while(~scanf("%d%d",&n,&m)){memset(map,0,sizeof(map));flag=0;int k,x;for(int i=0;i<n;i++){scanf("%d",&k);root[i]=i;while(k--){scanf("%d",&x);map[i][x]=1;    //对无冲突的点的组合标记为真
            }}DFS(0,0);if(m>=n || flag)puts("YES");elseputs("NO");}return 0;
}

HDU 2208 唉,可爱的小朋友(DFS)相关推荐

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

    Problem Description 唉,小朋友是比较麻烦的.在一个幼儿园里,老师要上一节游戏课,有N个小朋友要玩游戏,做游戏时要用小皮球,但是幼儿园里只有M个小皮球,而且有些小朋友不喜欢和一些小朋 ...

  2. [HDU 1427]速度计算24点(DFS暴力搜索)

    主题连接:  http://acm.hdu.edu.cn/showproblem.php?pid=1427 思路:简单的DFS.dfs(sum,next,p)表示当前已经算出的值是sum,括号里算 ...

  3. HDU2208唉,可爱的小朋友

    Problem Description 唉,小朋友是比较麻烦的.在一个幼儿园里,老师要上一节游戏课,有N个小朋友要玩游戏,做游戏时要用小皮球,但是幼儿园里只有M个小皮球,而且有些小朋友不喜欢和一些小朋 ...

  4. HDU - 3974 Assign the task (DFS建树+区间覆盖+单点查询)

    题意:一共有n名员工, n-1条关系, 每次给一个人分配任务的时候,(如果他有)给他的所有下属也分配这个任务, 下属的下属也算自己的下属, 每次查询的时候都输出这个人最新的任务(如果他有), 没有就输 ...

  5. HDU 5527:Too Rich(DFS+贪心)***

    题目链接 题意 给出p块钱,现在要用十种硬币凑出,每种硬币有c[i]个,问最多能用多少个硬币. 思路 首先确定,对于每个硬币就是能用小的替换就不用大的. 所以,可以先把硬币尽量用小的替换,如果小的不够 ...

  6. HDU 1010 Tempter of the Bone DFS(奇偶剪枝优化)

    需要剪枝否则会超时,然后就是基本的深搜了 #include<cstdio> #include<stdio.h> #include<cstdlib> #include ...

  7. hdu 2553 N皇后问题【dfs】

    N皇后问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  8. HDU - 5788 Level Up(主席树+dfs序+树状数组)

    题目链接:点击查看 题目大意:给出一棵有向树,每个节点都有一个初始的权值 a[ i ] ,和一个通过计算得到的权值 mid[ i ] ,mid 数组的计算方法如下:mid[ u ] 为结点 u 及其子 ...

  9. HDU - 6203 ping ping ping(LCA+dfs序+线段树)

    题目链接:点击查看 题目大意:给出一棵由n+1个节点组成的数,节点编号为0~n(这个无关紧要,预处理时所有节点以及n都自增1即可转换为正常的模型了),现在给出m组节点u和v,问若想让m组u和v都断开连 ...

最新文章

  1. 腾讯开源分布式NoSQL存储系统DCache | 技术头条
  2. 案例分析 | SAP如何帮助企业实现端到端的数字化供应链管理
  3. 常见的浏览器兼容问题
  4. 错误中积累经验,BUG中寻发展,总结中提升
  5. node都会 react_学react需要node吗
  6. Objective - C基础: 第一天 - 5.对象和类
  7. Windows XP with SP3 All Edtion Download
  8. 【赠书】深入浅出Python量化交易实战
  9. 制作WEB在线编辑器-插入HTML标签
  10. linux删除git账号密码忘记了,linux清除git账号密码
  11. docker的简单操作和端口映射
  12. 区别Transform、Transition、Animation
  13. sharding-jdbc水平分库与垂直分库
  14. android实战开发02
  15. C语言中188 10取模等于多少,C语言编程:任取x为十进制整数,编程将x转换成对应的八进制数后输出。...
  16. 3.Linux性能诊断 --- 快速检查单(10个命令) 监控
  17. 北京理工大学c语言课后答案,《北京理工大学C语言教材习题答案》.doc
  18. 如何在 think-cell 瀑布图中并行汇总多个系列?
  19. DELL 电脑 ubuntu20.04系统安装(最新最简版)
  20. 2015实习准备之C/C++篇(未完待续)

热门文章

  1. python深入和扩展_用Python来扩展Postgresql(一)
  2. docker版iOS超级签应用分发平台源码分享[带免签封装]
  3. 元祖数据mysql_MySQL数据库——表操作
  4. Django使用mysql连接池_Django db使用MySQL连接池
  5. sqlserver文件转mysql_怎样将Sqlserver数据库转成mysql数据库
  6. 捐赠赞助单页HTML模板
  7. 面试:一文搞懂重载和重写的区别
  8. 移动开发在路上-- IOS移动开发系列 多线程二
  9. 公布一个简单的日志记录方法 【转】-要研究
  10. JavaScript 文件拖拽上传插件 dropzone.js 介绍