만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

최소 스패닝 아보레선스

시간 제한2초메모리 제한1024 MB

요약
방향 그래프에서 정점 r을 루트로 하여 모든 정점을 잇는 트리의 간선 가중치 합이 최소인 값을 구합니다. 그런 트리가 없으면 -1을 출력합니다.
난이도

어려움10점 중 8점

유형
최소 신장 트리, 그래프, 유니온 파인드, 힙
정답자
아직 제출이 없습니다

문제

Arborescence G=(V,A)G=(V,A)는 다음 조건을 만족하는 방향 그래프이다.

  • 모든 정점 v∈Vv \in V에 대해 정점 rr에서 정점 vv로 가는 경로가 존재하는 정점 r∈Vr \in V가 있다. 이 정점 rr을 루트 노드(root node)라고 한다.
  • AA의 방향을 없앤 간선 집합을 EE라 할 때, 무방향 그래프 G′=(V,E)G'=(V,E)는 트리이다.

간선에 가중치가 있고 사이클이 없는 방향 그래프 G=(V,A)G=(V,A)와 정점 rr이 주어진다. 각 정점에는 1부터 NN까지 번호가 붙어 있다. 이때 정점 rr을 루트로 하는 Spanning Arborescence 중 간선 가중치의 합이 최소인 것을 구한다.

이와 관련된 알고리즘으로, O(∣V∣∣A∣)O(|V||A|)에 동작하는 Chu-Liu-Edmonds' 알고리즘이 있고, Tarjan이 이를 개선해 시간 복잡도를 O(∣A∣log⁡∣V∣)O(|A| \log |V|)로 줄인 알고리즘이 있다. 다만 이 문제가 그 알고리즘을 쓰라고 낸 것은 아니다.

주어진 그래프에서 루트를 rr로 하는 Spanning Arborescence의 간선 가중치 합의 최솟값을 구한다.

입력

첫 번째 줄에 정점의 개수 NN, 간선의 개수 MM, 루트로 삼을 정점 번호 rr이 공백으로 구분되어 주어진다. (1≤N≤500 0001 \le N \le 500\,000; 0≤M≤1 000 0000 \le M \le 1\,000\,000; 1≤r≤N1 \le r \le N)

두 번째 줄부터 MM개의 줄에 걸쳐 간선 정보가 주어진다. 각 줄에는 세 정수 uu, vv, cc가 공백으로 구분되어 있으며, 가중치가 cc인 정점 uu에서 정점 vv로 가는 간선이 있다는 뜻이다. (1≤u,v≤N1 \le u, v \le N; u≠vu \ne v; 1≤c≤1 000 000 0001 \le c \le 1\,000\,000\,000)

주어진 그래프에서 임의의 두 정점을 잇는 간선은 최대 한 개이며, 사이클은 존재하지 않는다.

출력

정점 rr을 루트로 하는 Spanning Arborescence의 간선 가중치 합의 최솟값을 출력한다. 정점 rr을 루트로 하는 Spanning Arborescence가 없으면 -1을 출력한다.

예제3

  1. 예제 1

    입력
    3 3 1
    1 2 1
    1 3 2
    2 3 3
    
    예상 출력
    3
    
  2. 예제 2

    입력
    3 3 1
    1 2 1
    1 3 4
    2 3 3
    
    예상 출력
    4
    
  3. 예제 3

    입력
    2 1 1
    2 1 10
    
    예상 출력
    -1