不同于算法导论描述的dijstra算法——算导里的堆是点的堆,所以当发现有新的路径可以以更小的代价到达某点时(该点之前已经在堆里),会使用堆decrease key操作——把这个点的权值减低,并且调整堆使得堆合法。但是stl的优先队列并没有decrease key的操作,所以使用另一种实现——允许某点多次加入到优先队列里——其实就等价于优先队列里放Edge。所以在从优先队列里pop出最小权的点时,要判断该点是否已经处于result set里。这样做会使得复杂度从O((E+V)lgV) O ( ( E + V ) l g V ) 变为O(Elg