https://medium.com/@O5-25/data-structures-and-algorithms-greedy-approach-heap-priority-queue-5e3d1aea44e3