아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

점수의 합

시간 제한2초메모리 제한512 MB

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

어려움10점 중 8점

유형
동적 계획법, 트리, 비트 연산
정답자
아직 제출이 없습니다

문제

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

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

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

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

입력

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

다음 N−1N-1개의 줄에는 트리 AA의 간선이 한 줄에 하나씩, 두 정수 aa와 bb로 주어진다. (0≤a,b≤N−10 \le a, b \le N-1, a≠ba \ne b)

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

마지막 줄에는 정수 NN개 s0,s1,…,sN−1s_0, s_1, \dots, s_{N-1}이 공백으로 구분되어 주어진다. (−1000≤si≤1000-1000 \le s_i \le 1000)

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

출력

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

힌트

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

예제5

  1. 예제 1

    입력
    4
    0 1
    0 3
    1 2
    0 1
    0 3
    3 2
    1000 24 100 -200
    
    예상 출력
    1024
    
  2. 예제 2

    입력
    4
    0 1
    0 3
    1 2
    0 1
    0 3
    3 2
    1000 24 100 200
    
    예상 출력
    1324
    
  3. 예제 3

    입력
    4
    0 1
    0 3
    1 2
    0 1
    0 3
    3 2
    -1000 24 100 200
    
    예상 출력
    200
    
  4. 예제 4

    입력
    7
    0 1
    0 2
    1 3
    1 4
    2 5
    2 6
    0 1
    0 2
    1 3
    1 4
    2 5
    2 6
    -3 2 2 -1 2 2 -1
    
    예상 출력
    5
    
  5. 예제 5

    입력
    7
    0 1
    0 2
    1 3
    1 4
    2 5
    2 6
    0 1
    0 2
    0 3
    0 4
    0 5
    0 6
    -3 2 2 -1 2 2 -1
    
    예상 출력
    5