영향이 있을지 모르겠지만 최적화할 여지가 있어보이는 것을 짧게 이야기하겠습니다.
다익스트라 알고리즘 시 우선순위큐를 이용해서 O(ElogV)로 바뀌는 것은 잘 아실 겁니다.
그런데 위의 소스는 roads가 간선 정보를 의미하는 것으로 보이는데, 행렬로 구현되어있기 때문에 E = N^2 이 됩니다.
문제에서 명시되는 E는 10^4 이고, N^2 은 25 * 10^4 이기 때문에 최대 25배의 성능차이가 날 수 있습니다.
행렬이 아닌, 간선 정보들만 들고 루프를 도는 방식으로 변경하시면 조금 더 성능적으로 유리할 것으로 생각됩니다.
다른 부분은, 어디를 더 고쳐야될지 잘 모르겠네요.
간선 정보들만 잘 추려서 같은 알고리즘으로 푼 C++ 소스가 통과했습니다.
아마도 위의 내용을 수정한다면 좋은 결과가 있지 않을까 조심스레 추측해봅니다.
chldntjr1211 3년 전
처음 다익스트라를 이용해 최단 거리를 검색할 때, 최단 경로를 갱신할 때마다 이중 리스트에 부모노드를 저장해둡니다.
그리고 dfs를 이용해 간선을 제거한 뒤, 다시 다익스트라를 이용해 거의 최단 경로를 구합니다.
재채점되면서 시간 초과가 떴습니다.
어느 부분에서 최적화가 덜된 걸까요?