cf987f AND Graph

不是太明白……

#include <algorithm>
#include <iostream>
#include <cstdio>
using namespace std;
int n, m, cnt, uu;
bool a[4500005], vis[4500005];
void dfs(int x){
    if(vis[x])  return ;
    vis[x] = true;
    for(int i=0; i<n; i++)
        if(x&(1<<i))
            dfs(x^(1<<i));
    if(a[x])    dfs((1<<n)-1-x);
}
int main(){
    cin>>n>>m;
    for(int i=1; i<=m; i++){
        scanf("%d", &uu);
        a[uu] = true;
    }
    for(int i=0; i<(1<<n); i++)
        if(!vis[i] && a[i]){
            cnt++;
            dfs((1<<n)-1-i);
        }
    cout<<cnt<<endl;
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/poorpool/p/9109991.html