find(PQ_dist.begin(), PQ_dist.end(), make_pair(dist[v], v))
이 부분은 O(N)이고 여기서 TLE입니다. find() 함수는 선형 탐색으로 구현되어 있기 때문입니다. 빠르게 원소 검색를 하려면, PQ_dist.find() 나 PQ_dist.lower_bound() 같은 거를 사용해야"만" 합니다.
그리고 개인적으로 priority_queue를 쓰는 것을 추천드립니다. std::set하고 order가 똑같고 / 일반적으로 훨씬 빠르며 / set보다 문제될 일이 적습니다. (set은 다루다 실수하면 왜 틀린지도 모르고 망하기 좋아서.. 저것도 좋은 실수의 예네요.)
dohyeokkim 8년 전
Dijkstra에서 priority queue를 짤 때 어떤 stl container를 쓰는 것이 가장 좋을까요?
priority_queue는 nth element update가 안 돼서... googling해서 다음과 같은 답변을 참고했는데요.
http://stackoverflow.com/questions/649640/how-to-d...
그 중 조금 더 구현이 쉬워 보이는 2번째 방법이 좋을 거 같아 set을 이용했는데 TLE네요.
혹시 erase가 문제인가요?