mung3477   2년 전

안녕하세요. 시간초과가 나와서 질문 드립니다.

N <= 1000이고, M <= 10000인데 1초 제한이길래 N*(N+M)logM이면 108에 아슬아슬하게 걸쳐서 풀 수 있겠다고 생각해 모든 노드에서 다익스트라를 돌렸는데요. 시간초과가 나오더군요. 


왜 시간 초과가 날까요? 1초면 108이 아닌가요? 아니면 제가 시간복잡도 계산을 잘못 한 걸까요?

궁금해서 질문 드립니다.

djm03178   2년 전

다익스트라에서 우선순위 큐에서 비교해야 할 것은 시작점에서 그 정점까지의 거리입니다. 56번째 줄에서 큐에 넣고 있는 것은 그 거리가 아닌 직전 노드에서 연결된 간선의 길이입니다.

mung3477   2년 전

헉, 그렇네요. 감사합니다...

mung3477   2년 전

그 자리를 newPathCost로 고쳐서 올바른 값을 넣어주었는데도 시간 초과가 나는데, 이유를 알 수 있을까요?

새로운 방법으로 문제는 풀었습니다만..

djm03178   2년 전

87번째 줄에서 N번째는 초기화가 안 되는 것 같습니다.

djm03178   2년 전

그리고 시작점을 0으로 초기화도 하지 않고 있는 것 같은데 맞나요?

mung3477   2년 전

fill 함수가 (param1, param2]인 건 몰랐네요. 감사합니다. 

시작점 dist는 어차피 pq에 들어갈 일이 없다고 생각해서 초기화를 안 했었는데, 문제가 될까요?

mung3477   2년 전

fill만 고쳐줬더니 맞았네요.... 감사합니다!! 

너무 기초적인 걸 착각하고 있었네요.

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