You are given a set of size $m$ with integer elements between $0$ and $2^{n}-1$ inclusive. Let’s build an undirected graph on these integers in the following way: connect two integers $x$ and $y$ with an edge if and only if $x \& y = 0$. Here $\&$ is the bitwise AND operation. Count the number of connected components in that graph.
Input
In the first line of input there are two integers $n$ and $m$ ($0 \le n \le 22$, $1 \le m \le 2^{n}$).
In the second line there are $m$ integers $a_1, a_2, \ldots, a_m$ ($0 \le a_{i} < 2^{n}$) — the elements of the set. All $a_{i}$ are distinct.
Output
Print the number of connected components.
Examples
input
2 3
1 2 3
output
2
input
5 5
5 19 10 20 12
output
2
Note
Graph from first sample:

Graph from second sample:

Solution:
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int n, m;
cin >> n >> m;
vector<int> was(1 << n, 1);
for (int i = 0; i < m; i++) {
int x;
cin >> x;
was[x] = 0;
}
vector<int> used(1 << n, 0);
vector<int> que(1 << n);
vector<int> inner(1 << n);
int ans = 0;
for (int start = 0; start < (1 << n); start++) {
if (was[start]) {
continue;
}
ans++;
was[start] = 1;
que[0] = start;
int qs = 1;
for (int q = 0; q < qs; q++) {
int u = (1 << n) - 1 - que[q];
if (!used[u]) {
used[u] = 1;
inner[0] = u;
int is = 1;
for (int i = 0; i < is; i++) {
int z = inner[i];
if (!was[z]) {
was[z] = 1;
que[qs++] = z;
}
for (int bit = 0; bit < n; bit++) {
if ((z & (1 << bit)) && !used[z ^ (1 << bit)]) {
used[z ^ (1 << bit)] = 1;
inner[is++] = z ^ (1 << bit);
}
}
}
}
}
}
cout << ans << '\n';
return 0;
}
Related posts:
Idempotent functions
Restructuring Company
Mirror Box
New Year and Fireworks
Water Tree
Little Artem and Time Machine
Amity Assessment
Information Graph
Xors on Segments
Wilbur and Trees
Cow and Vacation
Bear and Poker
Lyndon factorization
Adding Digits
Fibonacci-ish II
Marbles
Second best Minimum Spanning Tree - Using Kruskal and Lowest Common Ancestor
Bribes
Beautiful League
Underfail
Random Function and Tree
Rock Is Push
Cheap Travel
XORinacci
Context Advertising
Fenwick Tree
Mateusz and an Infinite Sequence
Captain Marmot
Palisection
Count the Arrays
Fox And Jumping
Travel Card