부모
시간 제한5초메모리 제한128 MB
값이 있는 트리에서 부모 자식 쌍을 피하며 1개부터 K개까지 노드를 골라 고른 값의 합을 가장 크게 합니다.
문제
각 노드에 정수 값이 매겨진, 루트가 있는 트리가 주어진다. 노드 집합의 값은 그 집합에 속한 모든 노드의 값을 더한 값으로 정의한다.
양의 정수 에 대해, 다음 두 조건을 모두 만족하는 노드 집합을 -반부모 집합(K-anti-parental subset)이라고 하자.
- 집합에 속한 노드의 개수가 개 이상 개 이하이다.
- 집합에 속한 어떤 두 노드에 대해서도 한 노드가 다른 노드의 부모가 아니다. 즉, 집합은 부모와 자식 관계인 두 노드를 동시에 포함하지 않는다.
노드에 값이 매겨진 트리와 가 주어질 때, -반부모 집합이 가질 수 있는 값의 최댓값을 구하여라.
입력
첫째 줄에 테스트 케이스의 수 가 주어진다. 각 테스트 케이스는 다음과 같이 주어진다.
각 테스트 케이스의 첫째 줄에는 노드의 수 과 매개변수 가 공백으로 구분되어 주어진다. 이고 이다. 노드의 번호는 부터 까지이며, 번 노드는 항상 루트이다.
둘째 줄에는 개의 정수가 주어지며, 이는 번부터 번 노드까지의 값을 순서대로 나타낸다. 각 값은 범위에 속한다.
셋째 줄에는 개의 정수가 주어지며, 이는 번부터 번 노드까지 각 노드의 부모 번호를 번호가 증가하는 순서대로 나타낸다. 따라서 첫 번째 정수는 번 노드의 부모이다. 루트(번 노드)의 부모는 주어지지 않는다. 인 경우 이 줄은 비어 있다.
출력
각 테스트 케이스마다 한 줄에 해당 트리의 -반부모 집합이 가질 수 있는 값의 최댓값을 출력한다.