https://www.acmicpc.net/problem/20530
그래프 탐색과 유니온파인드로 접근했다.
풀이
정점 N개와 간선 N개를 가진 트리는 한 개의 사이클을 가지고 있는 트리이다. 따라서 정점 u에서 v로 가는 경로가 사이클을 거쳐가게 된다면 경로는 2개가 되고, 경로에 사이클이 없다면 경로는 1개가 되는 것이다.
따라서 사이클에 속해있는 정점을 파악한 뒤 유니온 파인드를 수행하다. 연결하려 하는 두 정점의 경로가 사이클에 속한 경로라면, 정점을 연결하지 않고 넘어간 뒤, 쿼리가 주어질 때, 두 정점의 부모가 같다면 1 아니면 2를 출력하면 정답이다.
주어진 예제를 통해 보면 정점 1 - 2 - 3으로 사이클이 이루어진다. 따라서 정점 1, 2, 3 사이의 간선을 없애고 쿼리에서 서로 다른 컴포넌트의 경로를 물어보면 해당 경로는 사이클을 통한 경로가 있다는 뜻이므로 2를 출력, 같은 컴포넌트 내의 경로를 물어보면 1을 출력하면 된다.
사이클 검출은 진입차수가 1인 정점부터 너비 우선 탐색을 수행하여 찾아내었다.
정답 코드
'Problem Solving > BOJ' 카테고리의 다른 글
[17396] 백도어 (0) | 2023.12.27 |
---|---|
[23040] 누텔라 트리 (Easy) (0) | 2023.11.10 |
[15559] 내 선물을 받아줘 (0) | 2023.10.31 |
[1765] 닭싸움 팀 정하기 (0) | 2023.10.30 |
[23324] 어려운 모든 정점 쌍 최단 거리 (0) | 2023.10.25 |