This solution uses a graph of customers and creates edges based on which other customers are incompatible based on likes/dislikes of pizza toppings
You can install networkx and uncomment sections of code to visualize
the graph and get an idea of what nodes are being removed each iteration
Best pizza obtained using this method:
d_difficutly.in.txt:
Toppings: 338
Customers served: 1701
Runtime: 73 seconds
e_elaborate.in.txt:
Toppings: 4203
Customers served: 2018
Runtime: 17 seconds