문제: https://www.acmicpc.net/problem/20040
유니온/파인드 문제입니다.
진행된 차례 m의 상한이 100만이므로 한 차례마다 사이클 탐색에 O(M)이 소모되면 O(M^2)으로 시간초과가 됩니다.
그러므로 현재 차례에서 사이클을 탐색하는데 시간을 줄여야 시간 초과가 나지 않습니다.
사이클 판별 방법
1. 매 두 점이 들어올 때 마다 두 점을 union 연산으로 같은 컴포넌트로 연결시켜줍니다.
2. 특정 차례에서 들어온 두 점이 이미 같은 컴포넌트에 있다면, 이 둘을 연결시키면 싸이클이 만들어집니다.
싸이클 판별인 find 연산에 O(logM)이 걸리므로 시간 복잡도는 O(MlogM)입니다.
코드: https://github.com/cotchan/algorithm/blob/main/BOJ/BOJ20040.java
'Algorithm > BOJ' 카테고리의 다른 글
[BOJ]14425번: 문자열 집합 (0) | 2022.03.15 |
---|---|
[BOJ]1327번: 소트 게임 (0) | 2022.03.07 |
[BOJ]1477번: 휴게소 세우기 (0) | 2022.03.06 |
[BOJ]6236번: 용돈 관리 (0) | 2022.03.03 |
[BOJ]2110번: 공유기 설치 (0) | 2022.03.03 |