sinse100   5년 전


제가 이문제를 푼 방법은 다음과 같습니다.

테스트 케이스가 

1

8 8

10 20 1 5 8 7 1 4

1 2 

1 3

2 4

2 5

3 6

5 7

6 7

7 8

라고 주어졌을 때 

각각의 건물을 정점으로 하고 그 사이를 선행관계를 나타내주는 간선을 가지는 방향그래프로 설정하였습니다.

그리고 최단 시간을 구하기 위해

정점 7 부터 시작하여 (최단 시간을 구하는 함수를 EarliestEvent 라 했습니다.)

EarliestEvent(7) = 7번 건물 짓는 시간 + max(EarliestEvent(5),EarliestEvent(6))

EarliestEvent(5) = 5번 건물 짓는 시간 + EarliestEvent(2)

이런식으로 재귀가 이루어지도록하다가 진입차수가 0 인 정점에서는 

해당 정점의 번호의 건물을 짓는 시간을 반환하도록 하였습니다.

또한, 그래프 객체를 정의하였는데, 그래프 객체(AOE) 는 입력된 정점의 개수와 같은 NetworkNode로 구성되어있습니다.

그리고 NetWorkNode 객체는 해당 건물의 번호, 그리고 해당 정점으로 들어오는 진입차수의 소스(몇번 정점에서 들어오는가??)들을 담을 벡터,

그리고 작업 시간으로 구성되어있습니다.

제가 생각하기에는 최상의 알고리즘 같은데 자꾸 시간이 초과 되네요......

djm03178   5년 전

이미 방문했던 건물을 또 방문할 수 있기 때문에 오래 걸립니다.

아래는 다이아몬드 모양으로 규칙이 길게 이어져 있는 케이스입니다.

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