프렌즈 통화 요금제
시간 제한1초메모리 제한128 MB
최대 16명의 직원을 짝지어 통화 요금 총합을 최소화하는 완벽 매칭을 비트마스크 DP로 구하는 문제입니다.
문제
클라크(Clarke)는 작은 회사를 운영한다. 업무 특성상 모든 직원은 서로 통화할 수 있도록 휴대전화를 지급받았고, 직원들의 통화 요금은 모두 클라크가 부담한다. 그는 이 요금을 최대한 줄이고 싶다.
통신사는 '프렌즈(friends)' 서비스를 제공한다. 자주 통화하는 두 사람은 '프렌즈' 쌍을 맺을 수 있으며, 이 경우 두 사람 사이의 통화 요금이 더 저렴해진다. 단, 한 사람은 최대 하나의 프렌즈 쌍에만 속할 수 있고, 프렌즈가 아닌 다른 사람과의 통화 요금은 그대로 유지된다.
1분 통화 요금은 프렌즈 쌍이면 , 그렇지 않으면 이다. 즉, 두 직원 사이의 분짜리 통화 하나는 두 사람이 프렌즈 쌍이면 , 아니면 의 비용이 든다. 전체 통화 요금은 모든 통화 비용의 합이다.
지난달 직원들의 통화 목록(누가 누구와 몇 분 통화했는지)이 주어질 때, 모든 직원을 개의 프렌즈 쌍으로 짝지어 회사 전체 통화 요금을 최소로 만들고자 한다. 가능한 최소 총 통화 요금을 구하여라.
입력
첫째 줄에 두 정수 와 이 공백으로 구분되어 주어진다 (). 는 프렌즈 쌍의 1분 통화 요금, 은 프렌즈가 아닌 경우의 1분 통화 요금이다.
둘째 줄에 직원 수를 나타내는 짝수 이 주어진다 (). 직원은 번부터 번까지 번호가 매겨져 있다.
셋째 줄에 통화 횟수 가 주어진다 ().
이어지는 개의 줄에는 각각 세 정수 , , 이 공백으로 구분되어 주어진다 (, , ). 이는 직원 와 가 분 동안 통화했음을 뜻한다.
출력
가능한 최소 총 통화 요금을 한 줄에 출력한다. 이는 모든 직원을 개의 프렌즈 쌍으로 가장 알맞게 짝지었을 때 얻을 수 있는 전체 요금의 최솟값이다.