Skip to content

Conversation

@oncsr
Copy link
Contributor

@oncsr oncsr commented Dec 21, 2025

🧷 문제 링크

https://www.acmicpc.net/problem/22561

🧭 풀이 시간

40분

👀 체감 난이도

✏️ 문제 설명

정점 N개인 그래프에서 아래 쿼리들을 처리해보자.

  • 1 u v : u와 v를 잇는 간선을 추가한다.
  • 2 u v : u와 v를 잇는 간선을 삭제한다.
  • 3 u v : u와 v가 같은 컴포넌트에 있는지 확인한다.

🔍 풀이 방법

쿼리의 순서를 시간으로 보면, 각 간선의 라이프사이클을 계산해놓을 수 있다.
간선들의 추가 삭제를 시간 순서에 따라 분리 집합에서 union, rollback하는 것으로 구현할 수 있다.
rollback 작업은 union의 역순으로 이루어져야 하기 때문에, 간선의 라이프사이클 하나를 분할 정복을 통해 O(logN)개로 쪼갠다.
-> 간선의 라이프사이클이 분할 정복의 한 노드가 나타내는 시간 구간을 갖도록 구현한다.

모든 간선에 대한 라이프사이클 전처리를 해주고, 마지막에 분할 정복 한 번으로 답을 구해줬다.

⏳ 회고

분리 집합에 rollback을 구현할 때는 path compression 대신 다른 최적화 방식을 써야 하는데 까먹어서 틀렸었다.

@oncsr oncsr self-assigned this Dec 21, 2025
@oncsr oncsr added the success 👍 해설을 보지 않고 풀었을 때 label Dec 21, 2025
@ShinHeeEul ShinHeeEul merged commit 200e1b6 into main Dec 21, 2025
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

success 👍 해설을 보지 않고 풀었을 때

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants