전 D(i, j) : i번째 도시를 방문할 때까지 j만큼의 비용을 사용했을 때, 가능한 최소 소요시간으로 table을 정의해서 O(E log E) 다익스트라와 동적계획법을 섞어서 풀었습니다.
10217번 - KCM Travel
다 시도해보더라도 O(N * M log K)의 시간복잡도를 가지므로 제가 짠 코드는 5036ms에 통과하더라구요.
아래는 제가 대회 당시에 작성했던 코드입니다. 참고하시길 바랍니다.
39번째 줄에 if (d[now.v][now.c] < now.d) continue; 를 넣지 않으니 8초 정도에 AC가 나오고
저 부분을 넣으니 5초 정도에 AC가 나오네요.
문제의 특성상 다익스트라를 돌다보면 D(i, j)가 한 번만 갱신되는 것이 아니라 여러 번 갱신되므로 저 부분이 있고 없고의 차이가 있습니다.
그리고 마지막으로 입력에서 주어지는 간선이 단방향임에 유의하시면 됩니다.
댓글을 작성하려면 로그인해야 합니다.
mrcamel 9년 전
go(cur, prvi)가 호출되면
(cur로 올 수 있는 방법) x (cur에서 prvi로 갈 수 있는 방법)
을 리턴해주는 방식으로 만들었습니다.
예로 도착지가 4일 때
1->3, 1->2->3으로 오는 방법이 (4,3), (3,2)고 3->4 가 (1,2) 일때
1->4로 올 수 있는 방법은 (4 + 1, 3 + 2), (3 + 1, 2 + 2)입니다
직접 데이터도 몇개 만들어보고 몇시간 고민 해봤는데 잘 안풀립니다..
다른 분들은 소스 저보다 엄청 짧으신데 제가 괜히 복잡한 방향으로 생각한 것 같네요;
도움 주시면 정말 감사하겠습니다.