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

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

체크섬

메모리 제한1024 MB

요약
일부가 손상된 N x N 불리언 행렬과 각 행과 열의 XOR 체크섬, 복구 비용이 주어질 때 행렬을 복원하는 최소 비용을 구한다.
난이도

보통10점 중 5점

유형
그래프, 유니온 파인드, 그리디, 구현
정답자
아직 제출이 없습니다

문제

Grace와 Edsger는 N×NN \times N 불리언 행렬 AA를 만들고 있다. ii번째 행과 jj번째 열의 원소는 Ai,jA_{i,j}로 나타낸다. 두 사람은 각 행과 각 열의 체크섬(주어진 원소들의 bitwise XOR)을 기록하기로 한다. ii번째 행의 체크섬은 RiR_i, jj번째 열의 체크섬은 CjC_j로 나타낸다.

예를 들어 N=2N = 2이고 A=[1011]A = \begin{bmatrix} 1 & 0 \\ 1 & 1 \end{bmatrix}이면 R=[10]R = \begin{bmatrix} 1 & 0 \end{bmatrix}이고 C=[01]C = \begin{bmatrix} 0 & 1 \end{bmatrix}이다.

행렬을 완성한 뒤 Edsger는 행렬을 자신의 컴퓨터에 저장한다. 그런데 바이러스 때문에 Edsger의 컴퓨터에서 행렬 AA의 일부 원소가 −1-1로 바뀌었다. 다행히 Edsger는 체크섬 값은 아직 기억하고 있다. 그는 행렬을 복원하고 싶어 Grace에게 도움을 청한다. 조사 끝에, 디스크에서 Ai,jA_{i,j}의 원래 값을 복구하는 데 Grace가 Bi,jB_{i,j}시간을 쓴다는 사실을 알아냈다. 최종 행렬 AA, 비용 행렬 BB, 각 행의 체크섬 RR과 각 열의 체크섬 CC가 주어질 때, 원래 행렬 AA를 복원하는 데 필요한 최소 총 시간을 Grace가 결정하도록 도와줄 수 있는가?

입력

입력의 첫 줄에는 테스트 케이스의 수 TT가 주어진다. 그다음 TT개의 테스트 케이스가 이어진다.

각 테스트 케이스의 첫 줄에는 정수 NN이 하나 주어진다.

다음 NN개 줄에는 각각 NN개의 정수가 주어지며 행렬 AA를 나타낸다. ii번째 줄의 jj번째 원소가 Ai,jA_{i,j}이다.

다음 NN개 줄에는 각각 NN개의 정수가 주어지며 행렬 BB를 나타낸다. ii번째 줄의 jj번째 원소가 Bi,jB_{i,j}이다.

다음 줄에는 행의 체크섬을 나타내는 NN개의 정수가 주어진다. ii번째 원소가 RiR_i이다.

다음 줄에는 열의 체크섬을 나타내는 NN개의 정수가 주어진다. jj번째 원소가 CjC_j이다.

출력

각 테스트 케이스마다 Case #x: y 형식의 한 줄을 출력한다. 여기서 xx는 테스트 케이스 번호(1부터 시작)이고 yy는 행렬 AA를 복원하는 데 필요한 최소 시간이다.

제한

  • 1≤T≤1001 \le T \le 100.
  • 모든 ii, jj에 대해 −1≤Ai,j≤1-1 \le A_{i,j} \le 1.
  • Ai,j=−1A_{i,j} = -1인 ii, jj에 대해 1≤Bi,j≤10001 \le B_{i,j} \le 1000이고, 그 외의 경우 Bi,j=0B_{i,j} = 0.
  • 모든 ii에 대해 0≤Ri≤10 \le R_i \le 1.
  • 모든 jj에 대해 0≤Cj≤10 \le C_j \le 1.
  • AA의 −1-1을 00 또는 11로 바꾸어 RR과 CC를 만족시키는 방법이 적어도 하나 존재한다.

힌트

Sample Case #1에서 A1,2A_{1,2}는 1번째 행 또는 2번째 열의 체크섬을 이용해 복원할 수 있다. 따라서 Grace는 데이터를 복구하는 데 시간을 전혀 쓰지 않고 행렬을 복원할 수 있다.

Sample Case #2에서 Grace는 A1,1A_{1,1}을 복구하는 데 1시간을 쓴다. 그 뒤 1번째 행과 1번째 열의 체크섬을 각각 이용해 A1,2A_{1,2}와 A2,1A_{2,1}을 복원할 수 있다. 그리고 2번째 행의 체크섬을 이용해 A2,2A_{2,2}를 복원할 수 있다. 따라서 Grace는 1시간을 써서 행렬을 복원할 수 있다.

Sample Case #3에서 Grace는 A1,1A_{1,1}을 복구하는 데 1시간, A2,2A_{2,2}를 복구하는 데 1시간을 더 쓸 수 있다. 그 뒤 체크섬을 이용해 나머지 행렬을 복원할 수 있다. 따라서 Grace는 총 2시간을 써서 행렬을 복원할 수 있다.

예제1

  1. 예제 1

    입력
    3
    3
    1 -1 0
    0 1 0
    1 1 1
    0 1 0
    0 0 0
    0 0 0
    1 1 1
    0 0 1
    2
    -1 -1
    -1 -1
    1 10
    100 1000
    1 0
    0 1
    3
    -1 -1 -1
    -1 -1 -1
    0 0 0
    1 1 3
    5 1 4
    0 0 0
    0 0 0
    0 0 0
    
    예상 출력
    Case #1: 0
    Case #2: 1
    Case #3: 2