这题是道状态压缩的水题
题意为输出一系列集合,求这些集合能组成的集合的个数
s|=(1<<(b-1))加入集合的数
s|i 表示s集合加入i集合
#include<cstdio>
#include<cstring>
int set[1<<15];
int n,m;
int main(){
while(scanf("%d%d",&n,&m)!=EOF){
memset(set,0,sizeof(set));
int k,s=0,b,count=0;
for(int j=0;j<n;j++){
s=0;
scanf("%d",&k);
for(int i=0;i<k;i++){
scanf("%d",&b);
s|=(1<<(b-1));
}
set[s]=1;
for(int i=0;i<=(1<<14);i++){
if(set[i]){
set[s|i]=1;
}
}
}
for(int i=0;i<=(1<<14);i++){
if(set[i]){
count++;
}
}
printf("%d\n",count);
}
return 0;
}