아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

다리 건설 계획

시간 제한1초메모리 제한256 MB

요약
A사 간선 k개와 B사 간선을 합쳐 n-1개로 모든 섬을 잇는 가장 싼 연결 계획을 구합니다.
난이도

보통10점 중 7점

유형
최소 신장 트리, 이분 탐색
정답자
아직 제출이 없습니다

문제

작은 섬 여러 개로 이루어진 도시가 있고, 주민은 그 섬에 나뉘어 산다. 섬 사이를 배로만 오갈 수 있어 주민은 불편을 겪는다. 시장은 모든 섬을 잇는 다리를 놓기로 했다.

이 도시에는 건설 회사 A와 B가 있다. 시장이 두 회사에 견적을 요청해 받은 제안은 모두 "A사(또는 B사)가 섬 uu와 섬 vv를 잇는 다리를 ww억 엔에 놓는다" 형태다.

시장은 제안 일부를 받아들여 예산이 가장 적은 계획을 세우려 한다. 그런데 한 회사의 제안만 너무 많이 받아들이면 다른 회사가 도산할 수 있고, 건설 회사가 둘뿐인 이 도시에 그런 상황은 바람직하지 않다. 한편 불필요한 공사라는 비판을 피하려면 모든 섬을 연결하는 데 필요한 최소 개수, 즉 n−1n-1개의 다리만 받아들일 수 있다. 그래서 시장은 A사의 제안을 정확히 kk개, B사의 제안을 정확히 n−1−kn-1-k개 받아들이기로 정했다.

이 조건을 만족하는 계획 중 비용이 가장 적은 계획의 비용을 구하는 프로그램을 작성하라. 계획의 비용은 받아들인 제안에 적힌 비용의 합이다.

입력

입력은 여러 개의 데이터 집합으로 이루어지고, 데이터 집합은 최대 30개다. 각 데이터 집합의 형식은 다음과 같다.

n m k
u1 v1 w1 l1
...
um vm wm lm

첫 줄에 정수 nn, mm, kk가 주어진다. nn은 섬의 수, mm은 제안의 총 개수, kk는 A사에 맡길 제안의 개수다 (2≤n≤2002 \le n \le 200, 1≤m≤6001 \le m \le 600, 0≤k≤n−10 \le k \le n-1). 섬은 1번부터 nn번까지 번호로 구분한다.

이어지는 mm줄에는 제안이 하나씩 주어지며, 각 줄은 정수 uiu_i, viv_i, wiw_i와 문자 lil_i로 이루어진다. uiu_i와 viv_i는 다리가 잇는 두 섬, wiw_i는 다리의 비용(억 엔), lil_i는 제안을 낸 회사의 이름이다 (1≤ui≤n1 \le u_i \le n, 1≤vi≤n1 \le v_i \le n, 1≤wi≤1001 \le w_i \le 100, lil_i는 'A' 또는 'B'). 모든 다리는 서로 다른 두 섬을 잇는다. 즉 ui≠viu_i \ne v_i다. 또 한 회사는 같은 섬 쌍에 제안을 최대 하나만 낸다. 즉 i≠ji \ne j이고 li=ljl_i = l_j이면 {ui,vi}≠{uj,vj}\{u_i, v_i\} \ne \{u_j, v_j\}다.

입력의 끝은 공백 하나로 구분한 0 세 개로 이루어진 줄로 표시한다.

출력

각 데이터 집합마다 예산이 가장 적은 계획의 비용(억 엔)을 정수 하나로 한 줄에 출력한다. 조건을 만족하는 계획이 없으면 -1을 출력한다.

예제1

  1. 예제 1

    입력
    4 5 2
    1 2 2 A
    1 3 2 A
    1 4 2 A
    2 3 1 B
    3 4 1 B
    5 8 2
    1 2 1 A
    2 3 1 A
    3 4 3 A
    4 5 3 A
    1 2 5 B
    2 3 5 B
    3 4 8 B
    4 5 8 B
    5 5 1
    1 2 1 A
    2 3 1 A
    3 4 1 A
    4 5 1 B
    3 5 1 B
    4 5 3
    1 2 2 A
    2 4 3 B
    3 4 4 B
    2 3 5 A
    3 1 6 A
    0 0 0
    
    예상 출력
    5
    16
    -1
    -1