GT and set

 Accepts: 35
 Submissions: 194
 Time Limit: 2000/1000 MS (Java/Others)
 Memory Limit: 65536/65536 K (Java/Others)
问题描述
有NN个集合,每个集合中有A_iA​i​​个数。
你要将这NN个集合划成LL个部分,使得每个部分的集合至少有一个共有的数。
如果至少有一个解输出YESYES,否则输出NONO
输入描述
第一行一个数T表示数据组数。(TT\leq≤2020)

对于每一组数据:
第一行两个数NN和LL。
接下来NN行每行描述一个集合:
第一个数A_iA​i​​表示该集合的大小,之后xx个互不相同的整数表示该集合的元素。
集合里的数字都是正整数且不大于300300. 1\leq1≤NN\leq30≤30,1\leq1≤L\leq5L≤5,1\leq1≤A_iA​i​​\leq10≤10,1 \leq L \leq N1≤L≤N hack时建议输出最后一行的行末回车;每一行的结尾不要输出空格。
输出描述
对于每组数据输出一行YESYES或NONO
输入样例
2
2 1
1 1
1 2
3 2
3 1 2 3
3 4 5 6
3 2 5 6
输出样例
NO
YES
Hint
对于第二个样例,有三个集合{1 2 3},{4 5 6},{2 5 6} 你要划成两个部分。
有一种方案是把第二个和第三个集合划成一个部分,第一个在另一个部分。有一种方案是把第二个和第三个集合划成一个部分,第一个在另一个部分。 第二个和第三个集合的数字有一个交集{6},所以合法。
还有一种划分方案就是把第一个和第三个集合划成一个部分,第二个在另一个部分。

题解:

可能一些选手题意不是很清楚,我这里再提供一个转化后的问题:给出N个集合。每次你可以指定一个数,然后所有包含这个元素的集合可以被删掉。问你能否经过最多L轮操作使得所有集合都被删掉。因为LL只有5,考虑直接dfs。对于第一个集合,我们枚举它的那个公共的数是多少。然后线性扫描过去,找到接下来第一个没有这个数的集合。(它显然不能通过这个公共的数与第一个数在同一个部分)。对于这个集合,再枚举它公共的数是多少,然后线性扫描过去找到第一个没有这两个数的集合……这样重复5次后如果还是没有,就直接NO好了。若中途扫完序列就是YES。

自己也写了一个dfs暴力,但不知道为什么一直TLE。。。ORZ。。。

学习了别人的代码之后,发现就是:哇塞,竟然还可以这样搞。。。

其实自己之前做poj有一道题目与此类似,但是自己还是没能想到ORZ。。。。就是如果只判断一个数是否在一个集合里面,只有两个状态,这个数还不大的话,那么bitset一定要加入考虑的范围。

具体解释见代码:

#pragma warning(disable:4996)
#include <iostream>
#include <algorithm>
#include <cmath>
#include <vector>
#include <string>
#include <cstring>
#include <bitset>
using namespace std; int n, divide;//表示当前集合数和所要的划分数
bitset<305>set[35];//表示该集合里面有哪些数,一共最多30个集合 int dfs(int id, bitset<305>*tmp)
{
if (id == n)//如果能够抵达n,说明n个集合都已经划分好了,自然正确了
{
return 1;
}
bitset<305>ans[35];
for (int i = 0; i < divide; i++)//tmp代表各个划分当前的状态,即这个划分中是靠哪一个数来维系的
{
ans[i] = tmp[i];
}
for (int i = 0; i < divide; i++)//枚举该集合能弄到哪一个划分中,没有可去的就单独到一个划分里面去
{
ans[i] = tmp[i]&set[id];
if (ans[i].count())//说明这个集合和之前的集合有交集,即可以放入到这个划分中,扫下一个集合
{
if (dfs(id + 1, ans))
return 1;
}
ans[i] = tmp[i];//该集合不放入到这个划分中
}
return 0;
} int main()
{
//freopen("i.txt","r",stdin);
//freopen("o.txt","w",stdout); int t, cnt, x;
scanf("%d", &t);
while (t--)
{
scanf("%d%d", &n, ÷); bitset<305>tmp[35];
for (int i = 0; i < n; i++)
{
scanf("%d", &cnt);
set[i].reset();
for (int j = 0; j < cnt; j++)
{
scanf("%d", &x);
set[i][x] = 1;
}
for (int j = 0; j <= 300; j++)
{
tmp[i][j] = 1;
}
}
int flag = dfs(0, tmp);
if (flag)
puts("YES");
else
puts("NO");
} //system("pause");
return 0;
}

HDU 5506:GT and set bitset+暴力的更多相关文章

  1. HDU - 4339: Query(bitset暴力找下一个为1的)

    题意:给定A,B长度相同的字符串,Q次操作,修改操作位单个字符修改,查询操作为询问从某点开始有多少连续相同的字符. 思路:我们把不相同的设为1,相同的设为0,那么询问就是找下一个为1的为位置,可以用线 ...

  2. HDU 1557 权利指数 国家压缩 暴力

    HDU 1557 权利指数 状态压缩 暴力 ACM 题目地址:HDU 1557 权利指数 题意:  中文题,不解释. 分析:  枚举全部集合,计算集合中的和,推断集合里面的团体是否为关键团队. 代码: ...

  3. HDU 1524 树上无环博弈 暴力SG

    一个拓扑结构的图,给定n个棋的位置,每次可以沿边走,不能操作者输. 已经给出了拓扑图了,对于每个棋子找一遍SG最后SG和就行了. /** @Date : 2017-10-13 20:08:45 * @ ...

  4. HDU 3131 One…Two…Five! (暴力搜索)

    题目链接:pid=3131">HDU 3131 One-Two-Five! (暴力搜索) 题意:给出一串数字,要求用加,减,乘,除(5/2=2)连接(计算无优先级:5+3*6=8*6= ...

  5. hdu 5506 GT and set dfs+bitset优化

    GT and set Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Probl ...

  6. HDU 5745 La Vie en rose 暴力

    La Vie en rose 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5745 Description Professor Zhang woul ...

  7. HDU 4920 Matrix multiplication(bitset)

    HDU 4920 Matrix multiplication 题目链接 题意:给定两个矩阵,求这两个矩阵相乘mod 3 思路:没什么好的想法,就把0的位置不考虑.结果就过了.然后看了官方题解,上面是用 ...

  8. HDU 4858 项目管理(邻接表 暴力模拟)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4858 我们建造了一个大项目!这个项目有n个节点,用很多边连接起来,并且这个项目是连通的! 两个节点间可 ...

  9. hdu 5475 An easy problem(暴力 || 线段树区间单点更新)

    http://acm.hdu.edu.cn/showproblem.php?pid=5475 An easy problem Time Limit: 8000/5000 MS (Java/Others ...

随机推荐

  1. 新建maven工程运行出现Intellij idea 报错:Error : java 不支持发行版本5

    Step1点击: 点击 保持一致: Step2点击 这样就可以了. 主要是运行时jdk版本不一致的问题

  2. Java入门笔记 05-多线程

    介绍:Java提供了非常优秀的多线程支持,程序可以通过非常简单的方式来启动多线程.本章主要内容为:多线程的创建.启动.控制以及同步操作,并介绍JDK 5新增的线程创建方式. 一.线程的创建与使用: 1 ...

  3. Fluent_Python_Part4面向对象,09-pythonic-obj,Python风格的对象

    第四部分第9章,Python风格的对象 这一章接第1章,说明常见的特殊方法实现. 本章包括以下话题: 支持用于生成对象其它表示形式的内置函数(如repr().bytes(),等等) 使用一个类方法实现 ...

  4. 关于SQL

    set nocount on 作用 阻止在结果集中返回显示受t-sql语句影响的行计数信息 set nocount on 不返回计数,set nocount off 返回计数 即使当set nocou ...

  5. Plastic Bottle Manufacturer - Different Cosmetic Plastic Bottle Materials, Different Characteristics

    Plastic bottles are usually made of PP, PE, K, AS, abs, acrylic, PET, and the like. Dust caps for th ...

  6. Spring Boot Security 使用教程

    虽然,我在实际项目中使用的是 shiro 进行权限管理,但 spring boot security 早已大名鼎鼎,虽然他的入门要相对复杂一点,但是设计视乎更加吸引人. 本章节就是以一篇快速入门 sp ...

  7. io异常

    针对异常,JVM默认的处理方案: 一旦遇到程序出现了问题,就会把问题的类名,错误原因,错误的位置等信息打印在控制台,以便我们观察. 并且,会自动从当前出问题的地方停止掉.这种处理方案虽然可以,但是不够 ...

  8. 寒假pta一

    打印沙漏 本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个“*”,要求按下列格式打 ***** *** * *** ***** 所谓“沙漏形状”,是指每行输出奇数个符号:各行符号中心对齐 ...

  9. 控制面保护(CPPr)

    除了CoPP外,管理员还可以通过使用控制面保护(Control Plane Protection,CPPr)机制抵御针对控制面的攻击,从本质上讲,CPPr属于CoPP的扩展,在CPPr中控制面接口被划 ...

  10. 【原】tcp三次握手和四次挥手