일단, 확실하지는 않지만
위상정렬은 cycle이 있으면 사용이 안된다고 알고 있어요.
2611번 - 자동차경주
일단, 확실하지는 않지만
위상정렬은 cycle이 있으면 사용이 안된다고 알고 있어요.
위상정렬과 다익스트라 모두 맞네요!
제가 놓쳤던 부분은 만약 중간에 1로 가는 과정이 있는 경우 제 알고리즘이 그 과정에서 끝나 버립니다. 더 좋은 길이 다음 과정에 있을지라도 확인이 안됩니다..
따라서 here == 1이 나오면 일단 pop 해줘서 다음 path를 검사할 수 있는 기회를 주는 것이 이 문제를 고치는 핵심이었습니다.
도움주신 wowoto9772, koosaga님들께 감사드립니다..ㅠㅠ
다익스트라의 코드를 이용했습니다. 처음에 모두 음수간선으로 바꾼다음에 벨만포드 알고리즘으로 최소값을 찾으면 답을 구할 수 있다고 생각했습니다.
저도 최단경로가 아니라서 다익스트라를 배제하고 위상정렬을 이용해서 풀었는데 다익스트라 코드를 이용해도 풀리네요ㅠㅠ..
자세한 알고리즘은 잘 모르겠습니다..ㅠㅠ
다익스트라가 최장 경로가 안되는 이유가 사이클이 생기면 무한대의 값으로 돌기때문입니다.
근데 문제에서 사이클이 없다는 조건이 있기 때문에 그냥 트리에서 다익스트라 돌리듯이 생각하시면 이해하시기 쉬울거라 생각합니다!
따라서 다익스트라 코드를 이용해 풀어도 풀리는 거구요..
음수 간선이 존재하지 않는 문제 입니다. 처음에 모든 간선을 음수간선으로 만들어 주고 다익스트라로 구현 할려고 했는데
다익스트라 증명에서 모든 간선이 양수이어야 한다는 조건 때문에 그 방식으로 안풀었습니다.
결론은 음수 간선은 존재하지 않고, 사이클이 존재하지 않는 다는 문제 조건때문에
위상 정렬을 사용할 수 있고 더 나아가서 다익스트라를 돌려도 최장길이 간선을 구할수 있습니다.
댓글을 작성하려면 로그인해야 합니다.
alohajihwan 7년 전
다익스트라 말고 각각의 indegree를 저장하고 indegree[i]값이 0일때 큐에 넣어 경로를 계산해 주었는데 왜 틀렸는지 궁금합니다...ㅠㅠ
이 코드는 dp문제처럼 모든 경우를 다 고려했다고 생각했는데 제 생각이 잘못된 것인지 알려주세요ㅠㅠ