dijkstra with heap