比赛 |
状态压缩DP练习 |
评测结果 |
AAAAAAAAAA |
题目名称 |
安排公牛 |
最终得分 |
100 |
用户昵称 |
梦那边的美好ET |
运行时间 |
0.190 s |
代码语言 |
C++ |
内存使用 |
21.66 MiB |
提交时间 |
2019-05-28 19:39:47 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int n,m,a[21],f[1<<21],ans;
int count(int x){int s=0;while(x>0)++s,x-=(x&(-x));return s;}
int main(){
freopen("examnine.in","r",stdin);
freopen("examnine.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=1,x,p;i<=n;++i){
scanf("%d",&p);
for(int j=1;j<=p;++j)scanf("%d",&x),a[i]|=(1<<(x-1));
}
f[0]=1;
for(int i=1;i<(1<<m);++i){
int r=count(i);
if(r>n)continue;
int t=i&a[r];
while(t>0)f[i]+=f[i^(t&(-t))],t-=(t&(-t));
if(r==n)ans+=f[i];
}
printf("%d\n",ans);
return 0;
}