BOJ 12703 Cheating a Boolean Tree (Small)
BOJ 12703 Cheating a Boolean Tree (Small)
문제 내용
개의 노드로 이루어진 논리 회로가 주어집니다. 이 논리 회로는 이진 트리 모양으로, 1부터 까지 각 노드에 번호를 매겼을 때 번 이하의 노드는 논리 게이트이고, 나머지 노드는 입력 노드입니다. 번 논리 게이트는 번과 번 노드를 입력으로 받습니다.
각 게이트는 AND 또는 OR 게이트입니다. 당신은 이 논리 회로에서 몇 개의 게이트를 골라 AND를 OR로, 또는 OR를 AND로 바꿀 수 있습니다.
이때, 최종 출력값이 가 되도록 하기 위해 바꿔야 하는 게이트의 최소 개수를 구하세요. 이미 최종 출력값이 라면 답은 0입니다.
입력
첫 번째 줄에 테스트 케이스의 개수 이 주어집니다. ()
각 테스트 케이스에 대해, 첫 줄에 과 가 주어집니다. (, )
다음 개의 줄에 걸쳐서, 1번부터 번 노드의 정보가 와 의 두 값으로 주어집니다. () 가 1이면 AND, 0이면 OR 게이트이고, 가 1이면 이 게이트를 바꿀 수 있음, 0이면 바꿀 수 없음을 의미합니다.
다음 개의 줄에 걸쳐서, 번 노드부터 번 노드까지의 입력 노드의 값이 주어집니다.
출력
각 테스트 케이스에 대해, Case #{테스트 케이스 번호}: {문제의 정답}의 형식으로 출력합니다. 게이트를 어떻게 바꾸더라도 출력값을 로 만들 수 없다면 문제의 정답 대신 IMPOSSIBLE을 출력합니다.
문제 풀이
스포일러
이 29 이하일 때, 트리에 있는 게이트의 개수는 14개 이하입니다. 따라서, 가능한 모든 경우를 시도해 보고, 그 중에서 결과가 인 것을 찾아서 바뀐 게이트의 개수의 최솟값을 출력하면 됩니다.
Last updated on