트리 균형 맞추기
시간 제한2초메모리 제한1024 MB
각 노드의 점 개수를 주어진 범위 안에서 정하여 조상과 자손 사이 차이의 최댓값을 가장 작게 만듭니다.
문제
농부 존은 여러 소 품종의 진화를 깊이 연구해 왔다. 그 결과는 개 ()의 노드로 이루어진 루트 달린 트리이며, 노드에는 번 번호가 붙어 있고 각 노드는 소 품종 하나에 대응한다. 각 에 대해 노드 의 부모는 노드 ()이며, 이는 품종 가 품종 에서 진화했다는 뜻이다. 노드 는 이거나 가 의 조상이면 노드 의 조상이라고 한다. 트리의 모든 노드 에는 반점 수 (정수)를 가진 품종이 대응한다. 트리의 불균형도는 가 의 조상인 모든 노드 쌍 에 대한 의 최댓값으로 정의한다. 농부 존은 각 품종의 정확한 값은 모르지만 그 하한과 상한은 알고 있다. 여러분의 과제는 각 노드에 정수 ()를 배정하여 트리의 불균형도를 최소화하는 것이다.
입력
첫 줄에는 테스트케이스의 수 ()와 정수 이 주어진다. 각 테스트케이스는 이 적힌 줄로 시작하고, 이어서 개의 정수 이 적힌 줄이 주어진다. 다음 개 줄에는 각각 두 정수 와 가 주어진다. 모든 테스트케이스의 을 합하면 를 넘지 않는다고 보장된다.
출력
각 테스트케이스마다 의 값에 따라 한 줄 또는 두 줄을 출력한다. 첫 줄에는 최소 불균형도를 출력한다. 이면 위의 불균형도를 달성하는 배정 을 공백으로 구분해 한 줄 더 출력한다. 올바른 배정이라면 어떤 것이든 받아들여진다.