관객의 환호
시간 제한1초메모리 제한512 MB
주어진 k개의 실력 값을 루트 트리의 k개 리프에 배정해, 각 내부 노드의 리프 실력 값 합을 모두 더한 총합이 최대가 되도록 한다.
문제
당신은 곧 열릴 Bordfite Arena 프로게이밍 대회의 감독이다. 여러 선수를 초대했고, 이제 우승자를 가릴 녹아웃 토너먼트의 대진을 짜려고 한다. 알다시피 Bordfite Arena는 실력이 큰 비중을 차지하고 운의 개입이 거의 없는 게임이다. 따라서 몇 명의 선수가 Bordfite Arena 경기를 치르든 가장 실력이 좋은 선수가 항상 이긴다. 그러니 토너먼트의 우승자는 이미 정해져 있고, 당신은 이 점이 조금 걱정된다. 관객을 어떻게 달랠 것인가?
당신은 관객이 무엇을 재미있어하는지 알아보기 위해 짧은 탐색에 나선다. 놀랄 것도 없이, 사람들은 실력 있는 선수들이 겨루는 모습을 가장 재미있어한다. 경기가 열릴 때마다 관객이 경기에서 얻는 행복은 그 경기에 참가한 선수들의 실력값의 합이다. 토너먼트 전체에서 관객이 얻는 총 행복은 모든 경기에서 얻은 행복의 합이다. 당연히 당신은 토너먼트가 끝났을 때 관객이 최대한 행복하기를 바라므로, 이 정보는 매우 유용하다.
게다가 당신은 사람들에게 어떤 녹아웃 방식이 좋은지 물어보는 데 시간을 좀 들였다. 그 결과, 그들은 평범한 이진 트리 대신 특이하게 생긴 특정 루트 트리를 선호한다는 것을 알게 되었고, 그래서 그 트리를 사용하기로 한다. 이제 당신이 할 마지막 단계는 주어진 트리의 리프에 선수들을 배치해서, 토너먼트 전체에서 관객의 행복을 최대화하는 것이다.
입력
- 첫 줄에 정수 와 이 주어진다. 은 트리의 노드 수, 는 선수의 수이다. 노드는 부터 까지 번호가 붙어 있고, 이 트리의 루트이다.
- 둘째 줄에 인 개의 정수가 주어진다. 이는 선수들의 실력값이다.
- 그다음 개의 줄이 주어지고, 번째 줄()에는 노드 의 부모 가 있다.
트리의 리프는 정확히 개이고, 자식이 정확히 하나인 노드는 없다.
출력
- 이 토너먼트에서 관객이 얻을 수 있는 최대 행복을 출력한다.