题意:给你一些集合,求出可以组成的集合数;
用二进制方法:
3表示成 100;
4表示成1000;
则3,4组成的集合表示成1100;
在求按位或即可
代码:
#include<stdio.h>
#include<string.h>
int vis[(1<<14)+1];
int main()
{
int n,m,i,j;
while(~scanf("%d%d",&n,&m))
{
int res=0,a,k,b;
memset(vis,0,sizeof(vis));
while(n--)
{
scanf("%d",&k);
a=0;
while(k--)
{
scanf("%d",&b);
a=a|(1<<(b-1));
}
vis[a]=1;
for(j=0;j<=(1<<14);j++)
if(vis[j])
vis[a|j]=1;
}
for(i=0;i<=(1<<14);i++)
if(vis[i])
res++;
printf("%d\n",res);
}
return 0;
}