sinse100   5년 전

저의 알고리즘은 굉장히 단순합니다. 저는 위상 순서 정렬을 사용하지 않고, DFS 와 DP 를 적절히 사용했습니다.

일단, 저는 시작을  선행 정점가 없는 (진입차수가 0인) 정점에서 시작하는 것이 아니라, 목표 정점에서 시작을 하게 됩니다. ( 목표 건물 번호)

 

그렇게 해서 최종적으로 지어야 할 건물의 번호를 10이라고 할 때, 최단 시간을 구하는 함수를 Earliest , 해당 건물의  건설 비용을 cost라 할 때,

Earliest(10) = cost(10) + Max(Earliest(10의 선행 정점 번호(예를 들어 9),...)

Earliest(9) = cost(9) + Max(Earliest(9의 선행 정점 번호).....)

이렇게 해서 진입차수가 0인 정점까지 진행한후 진이 입차수가 0 인 정점에서는 cost(진입차수가 0인 정점 번호) 를 반환하는 

재귀 함수의 형태로 짰습니다.

물론, 만일 중복하여 방문하는 정점의 경우 해당 정점에서의 최단 시간을 기억하여 이를 일일이 다시 계산할 필요가 없도록 했습니다.

이 알고리즘을 시간복잡도 측면에서 타 알고리즘과 비교해 평가해 주실 수 있나요>>>

참고로 저는 이렇게 짰는데 시간 초과가 계속 발생하였습니다.

djm03178   5년 전

알고리즘이 아닌 코드의 문제일 수도 있으니, 코드를 보지 않으면 알 수 없습니다.

설명만으로는 문제가 없어 보이는데, 혹시 https://www.acmicpc.net/board/... 랑 같은 문제가 아닌지 확인해보세요.

seico75   5년 전

저도 동일하게 짰는데 통과했습니다.  

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