#include <stdio.h>
int n, m, i, j, k, ans, a[15];
void dfs(int k, int s){
    if(k > n){
        ans += s == (1<<m)-1;
    }//最终全选即可
    else{
        dfs(k+1, s);
        dfs(k+1, s|a[k]);
    }
}//不会状态压缩,暴力标记回溯也行
int main(){
    scanf("%d%d", &m, &n);
    for(i=1; i<=n; i++){
        scanf("%d", &j);
        while(j--){
            scanf("%d", &k);
            a[i] |= 1 << k-1;
        }//所选数字的状态
    }
    dfs(1, 0);
    printf("%d\n", ans);
    return 0;
}

作者 crxis

发表回复