首页 > 其他 > 详细

[POJ 2443] Set Operation (bitset)

时间:2014-12-13 00:42:26      阅读:387      评论:0      收藏:0      [点我收藏+]

题目链接:http://poj.org/problem?id=2443

题目大意:给你N个集合,每个集合里有若干个数。M个查询,每个查询有a,b两个数。问是否存在一个集合同时包含a,b这两个数。若存在则输出Yes,否则为No。

 

康神竟然一下子就想出来了。。

思路:统计每个数在哪个集合出现过,用bitset记录下来。然后对于a,b,则把两个bitset取与。

如果得到空集就是No,否则就是Yes。

 

 1 #include <cstdio>
 2 #include <bitset>
 3 #include <algorithm>
 4 #include <cstdlib>
 5 #include <iostream>
 6 
 7 using namespace std;
 8 
 9 const int MAX_N = 222222;
10 int N;
11 bitset<1111> bs[MAX_N];
12 
13 int main(){
14     while(scanf("%d",&N)!=EOF){
15         for(int i=0;i<MAX_N;i++) bs[i].reset();
16         for(int i=0;i<N;i++){
17             int a,an;
18             scanf("%d",&an);
19             while( an-- ){
20                 scanf("%d",&a);
21                 bs[a].set(i);
22             }
23         }
24         int M;
25         scanf("%d",&M);
26         while(M--){
27             int a,b;
28             scanf("%d%d",&a,&b);
29             bitset<1111> t = bs[a]&bs[b];
30             if( t.count() ){
31                 puts("Yes");
32             } else {
33                 puts("No");
34             }
35         }
36     }
37 
38     return 0;
39 }

 

[POJ 2443] Set Operation (bitset)

原文:http://www.cnblogs.com/llkpersonal/p/4160685.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!