The Cow Doctor UVALive - 3524(使用bitset)枚举

匿名 (未验证) 提交于 2019-12-03 00:34:01

传送门

题意:判断一个集合是否已经由其他集合构成,也就是留下最小的子集

题解:使用bitset,设置两个bitset变量a,b,使用a记录每个药的集合,使用b记录可由其他药品构成的最终情况

//利用bitset来判断该集合是否已经有其他集合构成 #include<iostream> #include<cstdio> #include<bitset>  using namespace std;  const int maxn=305;  bitset<maxn>a[maxn]; bitset<maxn>b[maxn];  int main() {     int n,m,cnt,xu;     while(scanf("%d%d",&n,&m)!=EOF&&(n||m)){         for(int i=0;i<m;i++){             a[i]=b[i]=0;         }         for(int i=0;i<m;i++){             scanf("%d",&cnt);             while(cnt--){                 scanf("%d",&xu);                 a[i].set(xu);             }             for(int j=0;j<i;j++){                 if((a[i]&a[j])==a[i]){                     b[j]|=a[i];                 }else if((a[i]&a[j])==a[j]){                     b[i]|=a[j];                 }             }         }         int cnt=0;         for(int i=0;i<m;i++){             if(a[i]==b[i]){                 cnt++;             }         }         printf("%d\n",cnt);     }     return 0; } 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!