POJ 2443 Set Operation 题解
本文同时发布于
题目分析
给你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 题解的更多相关文章
- [POJ 2443] Set Operation (bitset)
题目链接:http://poj.org/problem?id=2443 题目大意:给你N个集合,每个集合里有若干个数.M个查询,每个查询有a,b两个数.问是否存在一个集合同时包含a,b这两个数.若存在 ...
- POJ 2443 Set Operation
Set Operation Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 3558 Accepted: 1479 Des ...
- POJ 2443 Set Operation(压位加速)
http://poj.org/problem?id=2443 题意: 有1000个集合,每个集合有至多10000个数,之后输入多个询问,判断询问的两个数是否位于同一个集合. 思路: 位运算...很强大 ...
- POJ 2443 Set Operation (按位压缩)
Description You are given N sets, the i-th set (represent by S(i)) have C(i) element (Here "set ...
- POJ 2823 Sliding Window 题解
POJ 2823 Sliding Window 题解 Description An array of size n ≤ 106 is given to you. There is a sliding ...
- POJ 2443:Set Operation 经典位运算好题
Set Operation Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 2965 Accepted: 1196 Des ...
- POJ 2585 Window Pains 题解
链接:http://poj.org/problem?id=2585 题意: 某个人有一个屏幕大小为4*4的电脑,他很喜欢打开窗口,他肯定打开9个窗口,每个窗口大小2*2.并且每个窗口肯定在固定的位置上 ...
- Poj 1659.Frogs' Neighborhood 题解
Description 未名湖附近共有N个大小湖泊L1, L2, ..., Ln(其中包括未名湖),每个湖泊Li里住着一只青蛙Fi(1 ≤ i ≤ N).如果湖泊Li和Lj之间有水路相连,则青蛙Fi和 ...
- poj 3264 Balanced Lineup 题解
Balanced Lineup Time Limit: 5000MS Memory Limit: 65536KB 64bit IO Format: %I64d & %I64u Subm ...
随机推荐
- Mister B and PR Shifts,题解
题目链接 分析: 题意很明白,不再多说了,直接分析题目,首先想一想暴力,直接枚举起点,然后求出来,时间复杂度n*n,显然不太好,所以我们考虑换一种方法枚举,当然本质还是枚举,其实你会发现变化i次和i+ ...
- Ticket Game CodeForces - 1215D 博弈题
题目描述 Monocarp and Bicarp live in Berland, where every bus ticket consists of n digits (n is an even ...
- mysql中给查询结果添加序号
当我们想为查询结果添加序号的时候可以这样写 SELECT @rowid:=@rowid+1 allid, pan_number, receive_person,time_note, url,unit_ ...
- Java面向对象详解-下
一. static static:静态的,可以用来修饰属性.方法.代码块(或初始化块).内部类 static修饰属性(类变量): 由类创建的所有的对象,都共用这一个属性 当其中一个对象对此属性进行修改 ...
- python数据处理(八)之展示数据
1.前言 1.1.不要擅自假定要讲的故事和数据是一致的,要先研究数据,然后讲述数据研究所得 1.2.讲故事是成为领域专家的重要部分. 1.3.将故事方法: a. 确定想要讲的故事 b.无论选择什么方式 ...
- 一个例子理解c++函数模板的编译
一.例子 template <typename T> inline void callWithMax(const T& a, const T& b){ f(a > b ...
- 02-URLConf调度器
1.工作原理 django通过urlconf来映射视图函数,只区分路径,不区分http方法 Django确定要使用的根URLconf模块,一般是在settings中的ROOT_URLCONF设置的值. ...
- 第二章: IPC机制
这章关于进程的概念,没有深入太多,只做了解跟学习 IPC: Inter-Process Communication,进程间通信或者跨进程通信,两个进程之间进行数据交换的过程 2.1介绍 线程:CPU调 ...
- Python Ethical Hacking - Malware Packaging(3)
Convert Python Programs to OS X Executables https://files.pythonhosted.org/packages/4a/08/6ca123073a ...
- 时间序列知识图谱-《利用Python进行数据分析》
所有内容整理自<利用Python进行数据分析>,使用MindMaster Pro 7.3制作,emmx格式,源文件已经上传Github,需要的同学转左上角自行下载或者右击保存图片. 其他章 ...