첩보원

시간 제한5초메모리 제한128 MB

요약
첩보원들이 만나 정보를 교환하고, 보내는 첩보원들이 남은 첩보원의 정보를 모두 알도록 회의와 파견 인원을 정해 총비용을 최소화한다.
난이도

어려움10점 중 8점

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

문제

당신은 정보기관의 수장 M이며, 1번부터 N번까지의 암호명을 가진 N명의 첩보원을 거느리고 있습니다. 각 첩보원은 서로 다른 나라에 파견되어 그곳에서 중요한 정보 한 가지씩을 입수했습니다.

당신이 해야 할 일은 두 단계로 이루어집니다.

  1. 첩보원들 사이의 회동을 주선합니다. 한 번의 회동에서는 정확히 두 명의 첩보원이 만나, 자신이 직접 얻었거나 이전 회동에서 알게 된 모든 정보를 서로 교환합니다. 서로 다른 나라에 있는 두 첩보원의 비밀 회동을 주선하는 일은 까다롭기 때문에, 가능한 각 회동에는 정해진 비용이 있습니다.
  2. 모든 회동이 끝난 뒤, 첩보원 중 일부를 골라 함께 임무에 파견합니다. 첩보원 kk를 파견하는 데는 MkM_k의 비용이 듭니다. 파견된 첩보원들이 함께, 파견되지 않은 첩보원들이 원래 입수한 모든 정보를 알고 있어야만 임무가 성공합니다.

임무를 준비하고 수행하는 데 드는 최소 총비용(주선한 회동들의 비용 합과 파견한 첩보원들의 파견 비용 합)을 구하세요.

입력

첫째 줄에 첩보원의 수 NN이 주어집니다 (2≤N≤10002 \le N \le 1000).

다음 NN개의 줄에는 각각 NN개의 정수가 주어집니다. kk번째 줄의 mm번째 정수는 첩보원 kk와 mm의 회동 비용이며, mm번째 줄의 kk번째 정수와 같고, 대각선 위치(k=mk = m)의 값은 00입니다. 모든 회동 비용은 10610^6 이하의 양의 정수입니다.

마지막 줄에는 NN개의 정수 M1,M2,…,MNM_1, M_2, \ldots, M_N이 주어집니다 (1≤Mk≤1061 \le M_k \le 10^6). MkM_k는 첩보원 kk를 임무에 파견하는 비용입니다.

출력

최소 총비용을 정수 하나로 출력합니다.

힌트

첫 번째 예제에서는 첩보원 1과 2, 그리고 2와 3 사이의 회동을 주선한 뒤 첩보원 2를 파견합니다.

두 번째 예제에서는 첩보원 2와 3 사이의 회동을 주선한 뒤 첩보원 1과 2를 파견합니다.

세 번째 예제에서는 첩보원 2와 4, 이어서 1과 2, 그리고 3과 5 사이의 회동을 주선한 뒤 첩보원 1과 3(또는 1과 5)을 파견합니다.

예제3

  1. 예제 1

    입력
    3
    0 6 9
    6 0 4
    9 4 0
    7 7 7
    
    예상 출력
    17
    
  2. 예제 2

    입력
    3
    0 17 20
    17 0 10
    20 10 0
    15 9 12
    
    예상 출력
    34
    
  3. 예제 3

    입력
    5
    0 3 12 15 11
    3 0 14 3 20
    12 14 0 11 7
    15 3 11 0 15
    11 20 7 15 0
    5 10 10 10 10
    
    예상 출력
    28