점수의 합

정점이 50개 이하인 두 트리에서 각각 연결 부분그래프를 이루는 비어 있지 않은 정점 집합 중 점수 합이 최대인 것을 찾는다.

어려움8동적 계획법트리비트 연산아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

정점이 NN개인 트리 AABB가 주어진다. 두 트리 모두 정점에 0번부터 N1N-1번까지 번호가 붙어 있고, ii번 정점의 점수는 sis_i이다. 점수는 정수이며 음수일 수도 있다.

다음 두 조건을 모두 만족하는, 공집합이 아닌 부분 집합 S{0,1,,N1}S \subseteq \{0, 1, \dots, N-1\}을 고른다.

  • 트리 AA에서 SS에 속한 정점만 남기면 연결된 부분 그래프가 된다.
  • 트리 BB에서 SS에 속한 정점만 남기면 연결된 부분 그래프가 된다.

이런 SS 중에서 점수의 합 iSsi\sum_{i \in S} s_i의 최댓값을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 정점의 개수 NN이 주어진다. (2N502 \le N \le 50)

다음 N1N-1개의 줄에는 트리 AA의 간선이 한 줄에 하나씩, 두 정수 aabb로 주어진다. (0a,bN10 \le a, b \le N-1, aba \ne b)

이어지는 N1N-1개의 줄에는 같은 형식으로 트리 BB의 간선이 주어진다.

마지막 줄에는 정수 NNs0,s1,,sN1s_0, s_1, \dots, s_{N-1}이 공백으로 구분되어 주어진다. (1000si1000-1000 \le s_i \le 1000)

입력으로 주어지는 두 그래프는 모두 트리이다.

출력

첫째 줄에 점수의 합의 최댓값을 출력한다.

힌트

첫 번째 예제에서는 {0,1}\{0, 1\}을 고를 때 점수의 합이 최대가 된다. {0,1,2}\{0, 1, 2\}를 고르면 트리 BB에서 연결된 부분 그래프가 되지 않는다.