danielkang1003   4년 전

안녕하세요. 다익스트라 접하고 풀고 있는데 시간초과가 뜨는데 어디서 뜨는건지 한번만 봐주시고 뭐가 문제인지 알려주시면 정말 너무나도 감사하겠습니다ㅠㅠㅠㅠ

ha_ram   4년 전

priority queue에 문제가 있네요

가장 가중치가 작은것부터 꺼내야 하는데

priority queue에 넣을 때 {next, -nextCost} 이렇게 넣으시면

pair의 비교조건에 따라서 first먼저 비교하여 first가 높은게 priority queue에 가장 위쪽으로 가게 되어서

다익스트라 알고리즘이 제대로 작동하지 않게 됩니다.

ha_ram   4년 전

아마 예상해보자면

15번째 줄을 pq.push({ 0, k });

17번째 줄을 int cur = pq.top().second;

18번째 줄을 int cost = -pq.top().first;

29번째 줄을 pq.push({ -nextCost, next });

이렇게 바꾸면 통과될것 같네요

danielkang1003   4년 전

ha_ram님 감사합니다..ㅠㅠ아직 정확하게 다익스트라 사용법이 숙지가 안되었나봅니다. 다시 배워서 풀어보겠습니다!

djm03178 님 정말 감사합니다!제가 왜 틀렸는지 저기에 다 들어있군요..!!

두분 정말 모두 감사드립니다~!

댓글을 작성하려면 로그인해야 합니다.