티스토리 뷰
https://www.acmicpc.net/problem/6007
O(N^4)
Maximum Toll Cost의 경우의 수가 O(N)이니. 이걸 고정시키고 O(N^3) Floyd Warshall을 돌리면 된다. Toll cost T보다 값이 크면 그 근처에 있는 에지들을 몽땅 날려버리고 플로이드. 반복 반복... 시간 복잡도는 O(N^4). TLE다.
O(N^3)
플로이드 와셜의 루프. For(i, j, k) dist[j][k] = min(dist[j][k], dist[j][i] + dist[i][k]);를 생각해 보자.
맨 바깥쪽 루프에서 도는 것은 중간 경유지이다. 2차원 배열에 중간 경유지를 모두 돌면서 업데이트하는 것이다.
그러면, 어떠한 j , k에 대해서, j -> k로 가는 최단 경로가, i까지 경유지가 돌았을 때 i + 1을 경유지로 포함할 수 있을까? 없다.
이제 경유지를 Maximum Toll Cost 증가순으로 올리면서 플로이드 와셜을 돌리면? 각 경유지 마다 현재의 맥시멈 톨비가 정해지니, 아까의 O(N^4) 알고리즘에서 했던 것을 똑같이 할 수 있다. 정점을 끼워넣는다는 식으로 생각하면 편함.
플로이드 와셜의 심오함을 느낄수 있는 문제다. ㄹㅇ 갓고리즘...
'공부 > Problem solving' 카테고리의 다른 글
Biconnected Component (0) | 2015.11.10 |
---|---|
성적 (USACO Jan 07 Gold) (0) | 2015.11.01 |
Solving System of Difference Constraints (3) | 2015.10.18 |
순간이동 장치 (IOI 2008) (0) | 2015.10.15 |
삼각형 (CEOI 2009) (0) | 2015.10.08 |
댓글
공지사항
최근에 올라온 글
- Total
- Today
- Yesterday