BOJ 8632 Byteland

BOJ 8632 Byteland

문제 링크:

문제 내용

정점 nn개, 간선 mm개인 무방향 그래프가 주어집니다. 각각의 간선에 대해, 그 간선이 적어도 하나의 최소 스패닝 트리에 포함되는지 판별하세요.

입력

첫 줄에는 정점의 개수 nn과 간선의 개수 mm이 주어집니다. (2n70002 \le n \le 7000, 1m300  0001 \le m \le 300\;000)

다음 mm줄에는 각 간선의 양 끝점의 번호 xx, yy와 그 간선의 가중치 ww가 주어집니다. (1x,yn1 \le x, y \le n, 1w100  0011 \le w \le 100\;001) ww의 범위에 주의하세요.

출력

1im1 \le i \le m에 대해 ii번째 줄에 입력의 ii번째 간선이 적어도 하나의 스패닝 트리에 포함된다면 TAK, 아니라면 NIE를 출력합니다.

문제 풀이

스포일러

Kruskal 알고리즘을 응용할 수 있습니다. 각 단계에서 서로 가중치가 ww로 같은 간선이 여러 개라면 이들 중에서 아무 순서로 선택할 수 있습니다. 따라서, union-find에서 이미 같은 집합에 들어있는 두 정점을 연결하는 간선을 제외하고 모든 간선은 MST에 포함시킬 수 있습니다.

또한, 가중치가 ww인 모든 간선을 처리한 이후에 union-find 집합의 상태는 간선을 추가하는 순서와 관계없음을 보일 수 있습니다. 따라서 가중치가 증가하는 순으로 위의 방법으로 처리해서 정답을 구할 수 있습니다.

Last updated on