priority_queue, greater > pq; vector dist; dist.assign(NUM_VERTICES, INF); dist[0] = 0; pq.push(ii(0, 0)); while (!pq.empty()) { di front = pq.top(); pq.pop(); int curNode = front.second, curDist = front.first; if (curDist > dist[curNode]) continue; for (i = 0; i < (int)adjlist[curNode].size(); i++) { int nextNode = adjlist[curNode][i].first, nextDist = curDist + adjlist[curNode][i].second; if (nextDist < dist[nextNode]) { dist[nextNode] = nextDist; pq.push(ii(nextDist, nextNode)); } } }