문제
풀이
쿼리를 마지막부터 거꾸로 처리하여 간선을 제거하는 쿼리가 아니라 간선을 추가하는 쿼리로 생각해 봅시다.
분리 집합을 이용하여 분리 집합 트리의 루트마다 색깔들을 담은 집합을 하나씩 저장해 줍시다. 간선을 추가할 때 노드 뿐 아니라 색라 집합도 함께 합쳐 줍시다.
작은 집합에서 큰 집합으로 합치는 테크닉을 이용하면 집합의 각 원소가 $\mathcal{O}(\log N)$번 이동하므로 해시를 이용한 집합을 사용하면 시간 복잡도 $\mathcal{O}(N\log N)$에 해결할 수 있습니다.
코드
코드에서는 트리를 이용한 집합을 사용하였으므로 시간 복잡도는 $\mathcal{O}(N\log^2N)$입니다.
1 | |