트리와 XOR
면접 대비시간 제한3초메모리 제한1024 MB
각 정점 r을 루트로 할 때, 부분트리에 xor 연산을 적용해 모든 a_i를 같게 만드는 최소 비용 m_r을 구합니다.
문제
정점이 개인 트리가 주어진다. 각 정점에는 부터 까지의 번호가 붙어 있고, 번 정점에는 정수 가 쓰여 있다. 당신은 원하는 만큼 시행을 하여 모든 를 같게 만들어야 한다.
한 번의 시행에서 당신은 정점 와 음이 아닌 정수 를 선택한다. 그 다음 를 루트로 하는 서브트리의 모든 정점 에 대하여, 를 로 바꾼다. 를 루트로 하는 서브트리의 크기를 라 할 때, 이 시행의 비용은 이다. 는 bitwise XOR을 의미한다.
번 정점이 트리의 루트일 때 목표를 달성하기 위한 최소 비용을 이라 하자. 을 구하여라.
입력
각 입력은 여러 개의 테스트 케이스로 이루어져 있다. 첫 번째 줄에 테스트 케이스의 개수 가 주어진다(). 다음 줄부터 각각의 테스트 케이스가 주어진다.
각각의 테스트 케이스의 첫 번째 줄에 정수 이 주어진다().
두 번째 줄에 개의 정수 가 주어진다().
다음 개의 줄에 트리의 간선이 잇는 정점의 번호를 나타내는 두 정수 와 가 공백으로 구분되어 주어진다().
주어진 간선이 트리를 이룸이 보장된다.
모든 테스트 케이스에서 의 총합은 를 넘지 않는다.
출력
각각의 테스트 케이스마다 개의 정수 을 공백으로 구분하여 출력한다.
힌트
첫 번째 테스트 케이스에서, 다음 방법으로 목표를 달성할 수 있다.
- 첫 번째 시행에서 , 을 선택한다. 시행 후 이 된다. 이 시행의 비용은 이다.
- 두 번째 시행에서 , 을 선택한다. 시행 후 이 된다. 이 시행의 비용은 이다.
- 세 번째 시행에서 , 를 선택한다. 시행 후 이 된다. 이 시행의 비용은 이다.
이 과정의 총 비용은 이다. 미만의 비용으로 목표를 달성하는 방법이 없음을 증명할 수 있다.
, , 도 마찬가지로 찾을 수 있다.
두 번째 테스트 케이스에서, 정점이 하나이므로 목표가 이미 달성되었다.