문제. 모든 간선의 가중치가 1인 (유향) 그래프 $G = (V, E)$와 시작점 $s$, 끝점 $t$가 주어졌다고 하자. 각 간선 $e \in E$에는 label $\ell(e)$가 있다. $s$에서 $t$로 간선 $e_1, e_2, \cdots, e_k$를 거쳐 이동하는 경로를 경로 튜플 $(\ell(e_1), \ell(e_2), \cdots, \ell(e_k))$로 표현하자. $s$에서 $t$로의 모든 최단 경로 가운데 경로 튜플 이 사전순으로 최소인 경로를 찾아보자.
일단, $s$에서 BFS를 돌리며, $O(|V| + |E|)$ 시간에 shortest path spanning tree를 만들 수 있다. 고로, $d(u) + 1 = d(v)$를 만족하는 $u \to v$ 간선만 남겨두고 생각할 수 있다.
이후, $t$에서 시작해 역방향 BFS를 돌리며, $O(|V| + |E|)$ 시간에 shortest path spanning tree의 간선들 가운데 $d(u, t) = d(v, t) + 1$을 만족하는 간선만을 남겨둘 수 있다.
마지막으로, $s$에서 시작해, 매 정점에서 여전히 남아 있는 '나가는' 간선 가운데 label이 최소인 것만을 택해서 이동하면, 원하는 경로를 얻게 된다.
이를 이용하면, BOJ 18121 문자열 압축 문제를 해결할 수 있다.
'Computer Science > Algorithms & Problem Solving' 카테고리의 다른 글
| 2022-06-05 Problem Solving (1) | 2022.06.05 |
|---|---|
| 랜덤한 교란 순열을 생성하는 card-based 프로토콜 (1) (2) | 2022.04.25 |
| 2-SAT 및 그의 응용 (0) | 2021.09.30 |
| 2021-09-10 Problem Solving (1) | 2021.09.11 |
| 2021-08-27 Problem Solving (2) | 2021.08.27 |