최소 스패닝 아보레선스
시간 제한2초메모리 제한1024 MB
방향 그래프에서 정점 r을 루트로 하여 모든 정점을 잇는 트리의 간선 가중치 합이 최소인 값을 구합니다. 그런 트리가 없으면 -1을 출력합니다.
문제
Arborescence 는 다음 조건을 만족하는 방향 그래프이다.
- 모든 정점 에 대해 정점 에서 정점 로 가는 경로가 존재하는 정점 가 있다. 이 정점 을 루트 노드(root node)라고 한다.
- 의 방향을 없앤 간선 집합을 라 할 때, 무방향 그래프 는 트리이다.
간선에 가중치가 있고 사이클이 없는 방향 그래프 와 정점 이 주어진다. 각 정점에는 1부터 까지 번호가 붙어 있다. 이때 정점 을 루트로 하는 Spanning Arborescence 중 간선 가중치의 합이 최소인 것을 구한다.
이와 관련된 알고리즘으로, 에 동작하는 Chu-Liu-Edmonds' 알고리즘이 있고, Tarjan이 이를 개선해 시간 복잡도를 로 줄인 알고리즘이 있다. 다만 이 문제가 그 알고리즘을 쓰라고 낸 것은 아니다.
주어진 그래프에서 루트를 로 하는 Spanning Arborescence의 간선 가중치 합의 최솟값을 구한다.
입력
첫 번째 줄에 정점의 개수 , 간선의 개수 , 루트로 삼을 정점 번호 이 공백으로 구분되어 주어진다. (; ; )
두 번째 줄부터 개의 줄에 걸쳐 간선 정보가 주어진다. 각 줄에는 세 정수 , , 가 공백으로 구분되어 있으며, 가중치가 인 정점 에서 정점 로 가는 간선이 있다는 뜻이다. (; ; )
주어진 그래프에서 임의의 두 정점을 잇는 간선은 최대 한 개이며, 사이클은 존재하지 않는다.
출력
정점 을 루트로 하는 Spanning Arborescence의 간선 가중치 합의 최솟값을 출력한다. 정점 을 루트로 하는 Spanning Arborescence가 없으면 -1을 출력한다.