I have $$$N$$$ elements and I want to maximize the number of elements that can be selected given to some constraints of the type “you can take at most 1 element from this subset of the elements”.

**Example**

I have 10 elements (labeled 1 through 10) with constraints:

- You can pick at most 1 element from the set { 3, 4 }
- You can pick at most 1 element from the set { 2, 5, 6, 9 }
- You can pick at most 1 element from the set { 1, 5, 7 }

An optimal solution is selecting elements { 1, 2, 3, 8, 10 }. I found this solution by writing the exponential solution.

I first thought I could reduce it to a maximum matching or flow problem but I failed to do so. Is it a known problem and can it be solved in polynomial time?

The short answer is I cannot be sure, but after some thought:

If I formulate this problem as a graph problem, I add a node for each number, and an edge between each pair of elements which exist in a common subset. The problem then seems to be that of finding the maximum independent set for each connected component of the graph — this is strongly NP-hard, according to wikipedia.

So my instinct is that it cannot be solved in polynomial time, but it is plausible that I have formulated this incorrectly and someone better than me will wow us.

And on the other hand if you have a graph you can for each edge (a, b) make a set {a, b} so these problems are equivalent.