本文同时发布于

博客园

洛谷博客

题目链接

题目分析

给你n个集合,每个集合里面都有可能会重复的数字

q个询问,每次询问两个数是否会在同一集合内

$n<=1000$

$q<=200000$


做法分析

算法一: $\mathcal{O}(nq)$ 的暴力做法

$vis[x][i]$ 表示 x 是否出现在第 i 个集合中,是为1,否为0

每一次询问枚举

算法二: 状态压缩压掉第二维

时间复杂度 $\mathcal{O}(n+q)$

但是 $n<=1000$ 范围会爆空间

具体做法:

vis[x] 表示 x 所包括的集合,如果 x 在第 i 个集合中出现,则第 i 位为1(二进制位)

储存操作: 第 i 个集合读到 x 时,则 vis[x]|=(1<<i)

查询操作: 查询 x 和 y 是否在同一集合内出现过,就是查询 vis[x]&vis[y] 是否为1

但是显然就算使用 unsigned long long 也经不过n<=1000的数据范围

参考Code:

#include<iostream>
#include<cstdio>
#include<bitset>
using namespace std;
int vis[10010];
int n,q,c,x,y;
bool f;
inline int read()
{
int r=0;
char ch=getchar();
while(ch<'0'||ch>'9')
ch=getchar();
while(ch>='0'&&ch<='9'){
r=(r<<3)+(r<<1)+(ch^48);
ch=getchar();
}
return r;
}
int main()
{
n=read();
for(int i=1;i<=n;i++)
{
c=read();
for(int j=1;j<=c;j++)
{
x=read();
vis[x]|=(1<<i);
}
}
q=read();
for(int i=1;i<=q;i++)
{
x=read();y=read();
if(vis[x]&vis[y])
puts("Yes");
else
puts("No");
}
return 0;
}

算法三: 用bitset对算法二进行优化

奇技淫巧bitset是一个极其好用的STL,类似于bool数组却比bool数组支持更多的操作,更快,占用空间更小

关于具体的bitset的各种操作珂以去网上找找

bitset在#include<bitset>头文件里

bitset<1010>vis[10010]这样就声明了10010个bitset

每一个bitset共有1010个bit,每个bit为1或0,初始都为0

bitset也支持按位与,按位或,按位异或,左移右移等操作等操作.

而且占用空间也小,一个bool是1byte,而bitset的一位只占1bit

时间复杂度$\mathcal{O}(n+q)$

参考Code:

#include<iostream>
#include<cstdio>
#include<bitset>
using namespace std;
bitset<1010>tmp,vis[10010];
int n,q,c,x,y;
bool f;
inline int read()
{
int r=0;
char ch=getchar();
while(ch<'0'||ch>'9')
ch=getchar();
while(ch>='0'&&ch<='9'){
r=(r<<3)+(r<<1)+(ch^48);
ch=getchar();
}
return r;
}
int main()
{
n=read();
for(int i=1;i<=n;i++)
{
c=read();
for(int j=1;j<=c;j++)
{
x=read();
vis[x][i]=1;//存入可以按正常的bool数组写
}
}
q=read();
for(int i=1;i<=q;i++)
{
x=read();y=read();
tmp=vis[x]&vis[y];
if(tmp.count()!=0)
puts("Yes");
else
puts("No");
}
return 0;
}

POJ 2443 Set Operation 题解的更多相关文章

  1. [POJ 2443] Set Operation (bitset)

    题目链接:http://poj.org/problem?id=2443 题目大意:给你N个集合,每个集合里有若干个数.M个查询,每个查询有a,b两个数.问是否存在一个集合同时包含a,b这两个数.若存在 ...

  2. POJ 2443 Set Operation

    Set Operation Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 3558   Accepted: 1479 Des ...

  3. POJ 2443 Set Operation(压位加速)

    http://poj.org/problem?id=2443 题意: 有1000个集合,每个集合有至多10000个数,之后输入多个询问,判断询问的两个数是否位于同一个集合. 思路: 位运算...很强大 ...

  4. POJ 2443 Set Operation (按位压缩)

    Description You are given N sets, the i-th set (represent by S(i)) have C(i) element (Here "set ...

  5. POJ 2823 Sliding Window 题解

    POJ 2823 Sliding  Window 题解 Description An array of size n ≤ 106 is given to you. There is a sliding ...

  6. POJ 2443:Set Operation 经典位运算好题

    Set Operation Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 2965   Accepted: 1196 Des ...

  7. POJ 2585 Window Pains 题解

    链接:http://poj.org/problem?id=2585 题意: 某个人有一个屏幕大小为4*4的电脑,他很喜欢打开窗口,他肯定打开9个窗口,每个窗口大小2*2.并且每个窗口肯定在固定的位置上 ...

  8. Poj 1659.Frogs' Neighborhood 题解

    Description 未名湖附近共有N个大小湖泊L1, L2, ..., Ln(其中包括未名湖),每个湖泊Li里住着一只青蛙Fi(1 ≤ i ≤ N).如果湖泊Li和Lj之间有水路相连,则青蛙Fi和 ...

  9. poj 3264 Balanced Lineup 题解

    Balanced Lineup Time Limit: 5000MS   Memory Limit: 65536KB   64bit IO Format: %I64d & %I64u Subm ...

随机推荐

  1. IA-32指令解析详解

    IA-32指令解析详解 0x00 前言 这段时间忙于考试,信息论和最优化,还有算法分析,有点让人头大.期间花了几天看SEH机制,能明白个大概,但是对于VC++对于SHE的包装似乎还是不是很明白,发现逆 ...

  2. [JAVA]标准IO流操作

    import java.io.*; /** * @Description: * @projectName:JavaTest * @see:PACKAGE_NAME * @author:郑晓龙 * @c ...

  3. 最新MySQL入门篇

    一.SQL简介 ​ SQL:结构化查询语言(Structured Query Language),是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询.更新和管理关系数据库系 ...

  4. Set 和 Map

    1. 数组去重 <script type="text/javascript"> [...new Set(array)] </script> 2. 条件语句的 ...

  5. easy tornado

    easy tornado 题目分析 这是一道2018年护网杯的题目 /flag.txt /welcome.txt /hints.txt 一共有3个文件. /flag.txt flag in /flll ...

  6. 数据可视化基础专题(八):Pandas基础(七) 数据清洗与预处理相关

    1.数据概览 第一步当然是把缺失的数据找出来, Pandas 找缺失数据可以使用 info() 这个方法(这里选用的数据源还是前面一篇文章所使用的 Excel ,小编这里简单的随机删除掉几个数据) i ...

  7. Hangfire实战二——为DashBoard页面添加权限认证

    概述 Hangfire Dashboard为我们提供了可视化的对后台任务进行管理的界面,我们可以直接在这个页面上对定时任务进行删除.立即执行等操作,如下图所示: 默认情况下,这个页面只能在部署Hang ...

  8. DVWA(xss部分源码分析)

    前言 DVWA靶场都不陌生,最新学习xss,从新又搞了一遍xss部分,从源码方面康康xss的原因,参考了很多大佬的博客表示感谢,网上也有很多DVWA靶场教程,就水一篇吧. 更多web安全知识欢迎访问: ...

  9. SpringBoot系列之Elasticsearch极速入门与实际教程

    @ 目录 一.什么Elasticsearch? 二.Elasticsearch安装部署 2.1 Elasticsearch安装环境准备 2.2 Docker环境安装Elasticsearch 2.3 ...

  10. P4554 小明的游戏 (洛谷) 双端队列BFS

    最近没有更新博客,全是因为英语,英语太难了QWQ 洛谷春令营的作业我也不会(我是弱鸡),随机跳了2个题,难度不高,还是讲讲吧,学学新算法也好(可以拿来水博客) 第一题就是这个小明的游戏 小明最近喜欢玩 ...