정점이 50개 이하인 두 트리에서 각각 연결 부분그래프를 이루는 비어 있지 않은 정점 집합 중 점수 합이 최대인 것을 찾는다.
정점이 NNN개인 트리 AAA와 BBB가 주어진다. 두 트리 모두 정점에 0번부터 N−1N-1N−1번까지 번호가 붙어 있고, iii번 정점의 점수는 sis_isi이다. 점수는 정수이며 음수일 수도 있다.
다음 두 조건을 모두 만족하는, 공집합이 아닌 부분 집합 S⊆{0,1,…,N−1}S \subseteq \{0, 1, \dots, N-1\}S⊆{0,1,…,N−1}을 고른다.
이런 SSS 중에서 점수의 합 ∑i∈Ssi\sum_{i \in S} s_i∑i∈Ssi의 최댓값을 구하는 프로그램을 작성하시오.
첫째 줄에 정점의 개수 NNN이 주어진다. (2≤N≤502 \le N \le 502≤N≤50)
다음 N−1N-1N−1개의 줄에는 트리 AAA의 간선이 한 줄에 하나씩, 두 정수 aaa와 bbb로 주어진다. (0≤a,b≤N−10 \le a, b \le N-10≤a,b≤N−1, a≠ba \ne ba=b)
이어지는 N−1N-1N−1개의 줄에는 같은 형식으로 트리 BBB의 간선이 주어진다.
마지막 줄에는 정수 NNN개 s0,s1,…,sN−1s_0, s_1, \dots, s_{N-1}s0,s1,…,sN−1이 공백으로 구분되어 주어진다. (−1000≤si≤1000-1000 \le s_i \le 1000−1000≤si≤1000)
입력으로 주어지는 두 그래프는 모두 트리이다.
첫째 줄에 점수의 합의 최댓값을 출력한다.
첫 번째 예제에서는 {0,1}\{0, 1\}{0,1}을 고를 때 점수의 합이 최대가 된다. {0,1,2}\{0, 1, 2\}{0,1,2}를 고르면 트리 BBB에서 연결된 부분 그래프가 되지 않는다.