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:
Om Nom and Spiders
Social Network
Catalan Numbers
Primal Sport
Underfail
Not Wool Sequences
Coffee Varieties (hard version)
Pie Rules
Optimize!
Rational Resistance
Palindrome
SMSC
Competitive Programmer
Hostname Aliases
Tài liệu giáo khoa chuyên Tin 3 quyển
Place Your Ad Here
Random Ranking
Wilbur and Swimming Pool
Trips
Command Line Arguments
New Year and Castle Construction
Boredom
Ehab and Path-etic MEXs
New Year and Conference
Big Secret
New Year and Finding Roots
Finding repetitions
Mirror Box
P-binary
Biridian Forest
Ksusha and Square
Power Products