CF 986C AND Graph(建模+DFS)

 1 #include
 2 bool ex[4194304],v[4194304];
 3 int a[4194305],n,al;
 4 void dfs(int x){
 5     if(v[x])return;
 6     v[x]=1;
 7     if(ex[x])dfs(al^x);
 8     for(int i=0;i){
 9         if(x>>i&1)dfs(x^(1<<i));
10     }
11 }
12 int main(){
13     int m,i,ans;
14     scanf("%d%d",&n,&m);
15     al=(1<1;
16     for(i=1;i<=m;i++){
17         scanf("%d",a+i);
18         ex[a[i]]=1;
19     }
20     ans=0;
21     for(i=1;i<=m;i++){
22         if(!v[a[i]]){
23             dfs(al^a[i]);
24             ans++;
25         }
26     }
27     printf("%d",ans);
28 }
View Code

题目描述

给定m个0~2n-1之间的整数,每一个整数代表一个点,两个整数之间有边当且仅当x&y=0,求无向图有多少联通快(n<=22)

题解

对于一个二进制数x,((1<

 

转载于:https://www.cnblogs.com/Xu-daxia/p/9380830.html

你可能感兴趣的:(CF 986C AND Graph(建模+DFS))