최소 비용 배수망

현재 사용 중인 신장 트리와 추가 간선들이 주어지고 한 간선에만 할인을 적용할 수 있을 때, 최소 비용 신장 트리로 가기 위해 필요한 최소 교체 횟수를 구한다.

어려움8최소 신장 트리그래프유니온 파인드그리디아직 제출이 없습니다시간 제한3초메모리 제한512 MB

문제

워터무 시에는 11번부터 NN번까지 번호가 붙은 건물이 있고, 건물 두 개를 잇는 배수관이 MM개 있다. 도시 계획이 어긋난 탓에 하수 처리장은 11번 건물 하나뿐이다.

각 배수관은 가동 상태이거나 정지 상태다. 가동 중인 배수관만 써서 11번 건물이 나머지 모든 건물과 직접 또는 간접으로 이어지면, 가동 중인 배수관의 집합을 올바른 배치라고 한다. 배수관은 건물 두 개를 직접 잇는다. 건물 XX가 건물 YY와 직접 또는 간접으로 이어져 있고 건물 YY가 건물 ZZ와 직접 또는 간접으로 이어져 있으면, XXZZ는 간접으로 이어져 있다.

시청은 지금 배수관 N1N - 1개로 이루어진 올바른 배치를 운영하고 있는데, 유지비가 너무 비싸다고 본다. 배수관마다 가동 중일 때 시가 내야 하는 월 유지비가 있고, 배치의 총비용은 가동 중인 배수관의 유지비 합이다. 정지 상태인 배수관에는 비용이 들지 않는다.

워터무 대학 연구진은 배수관 하나에 쓸 수 있는 실험용 성능 개선 장치를 만들었다. 원하는 배수관 하나를 골라 이 장치를 쓰면 그 배수관의 비용이 CC에서 max(0,CD)\max(0, C - D)로 줄어든다. DD는 장치의 세기다.

시는 배치의 비용을 최소로 만들되 그 작업을 빨리 끝내기를 원한다. 하루에 배수관 하나를 가동하고 다른 배수관 하나를 정지할 수 있다. 가동 중인 배수관의 집합이 올바른 배치가 되고, 그 비용이 모든 올바른 배치와 장치를 쓸 배수관의 모든 선택을 통틀어 최소가 되게 하려면 며칠이 필요한가?

작업 도중에 배치가 올바르지 않아도 되지만, 마지막에는 올바른 배치여야 한다.

입력

첫째 줄에 정수 NN, MM, DD가 주어진다. (1N1000001 \le N \le 100000, N1M200000N - 1 \le M \le 200000, 0D1090 \le D \le 10^9)

다음 MM개 줄에는 정수 AiA_i, BiB_i, CiC_i가 주어진다. 건물 AiA_i와 건물 BiB_i를 잇는 배수관이 있고, 가동 중일 때 월 유지비가 CiC_i라는 뜻이다. (1Ai,BiN1 \le A_i, B_i \le N, 1Ci1091 \le C_i \le 10^9)

MM개 줄 중 처음 N1N - 1개가 시가 지금 운영 중인 올바른 배치다.

건물 두 개를 잇는 배수관은 많아야 하나이고, 자기 자신을 잇는 배수관은 없다.

출력

작업을 끝내는 데 필요한 최소 일수를 한 줄에 출력한다. 지금 운영 중인 배치가 이미 최적이면 00을 출력한다.

힌트

첫 번째 예제에서는 D=0D = 0이라 장치를 어느 배수관에 쓰든 유지비가 바뀌지 않는다. 첫날에 건물 22와 건물 33을 잇는 배수관을 정지하고 건물 44와 건물 11을 잇는 배수관을 가동하면 된다.

두 번째 예제를 최소 일수로 끝내는 방법 하나는 이렇다. 먼저 건물 11과 건물 22를 잇는 배수관에 장치를 써서 비용을 33으로 줄인다. 첫날에는 건물 22와 건물 33을 잇는 배수관을 건물 11과 건물 33을 잇는 배수관으로 바꾸고, 둘째 날에는 건물 11과 건물 44를 잇는 배수관을 건물 11과 건물 55를 잇는 배수관으로 바꾼다. 이때 최적 배치의 비용은 1010이다. 한편 건물 11과 건물 33을 잇는 배수관이나 건물 11과 건물 55를 잇는 배수관에는 장치를 쓸 수 없다. 그 배수관의 유지비가 00이 되면 최적 배치의 비용이 1111인데, 비용 1010을 이미 만들 수 있기 때문이다.

세 번째 예제에서는 지금 운영 중인 배치가 이미 최적이다. 구현할 때 정수 오버플로를 조심해야 한다.