만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

파이몬의 나무

시간 제한4초메모리 제한1024 MB

요약
시작 정점과 간선을 붙이는 순서를 골라 i번째 간선의 가중치를 a_i로 만들 때, 완성된 가중치 트리 지름의 최댓값을 구합니다.
난이도

어려움10점 중 9점

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

문제

파이몬은 처음에 흰색인 정점 (n+1)(n + 1)개로 이루어진 나무를 왼쪽 주머니에서 찾아 가지고 놀기로 한다. 정점이 (n+1)(n + 1)개인 나무는 간선이 nn개인 연결된 무방향 그래프이다.

파이몬이 길이 nn인 정수 수열 a1,a2,⋯ ,ana_1, a_2, \cdots, a_n을 준다. 먼저 나무에서 정점 하나를 골라 검은색으로 칠한다. 그다음 아래 연산을 nn번 수행한다.

ii번째 연산에서는 검은색 정점 yiy_i와 간선으로 직접 연결된 흰색 정점 xix_i를 하나 고른다. 그 간선의 가중치를 aia_i로 정하고, xix_i를 검은색으로 칠한다. nn번의 연산이 끝나면 모든 간선에 가중치가 있는 나무가 남는다.

정점을 최적으로 고를 때, 가중치가 있는 나무 지름의 최댓값은 얼마인가? 나무의 지름은 가장 긴 단순 경로이고, 경로의 길이는 그 경로에 있는 간선 가중치의 합이다.

입력

입력은 여러 테스트 케이스로 이루어진다. 첫 줄에 테스트 케이스의 수 TT (1≤T≤5×1031 \le T \le 5 \times 10^3)가 주어진다. 각 테스트 케이스는 다음과 같다.

첫 줄에 수열의 길이 nn (1≤n≤1501 \le n \le 150)이 주어진다.

둘째 줄에 정수 a1,a2,⋯ ,ana_1, a_2, \cdots, a_n (1≤ai≤1091 \le a_i \le 10^9)이 주어진다.

다음 nn개 줄의 ii번째 줄에는 두 정수 uiu_i와 viv_i (1≤ui,vi≤n+11 \le u_i, v_i \le n + 1)가 주어진다. 이는 정점 uiu_i와 viv_i를 잇는 간선이 있다는 뜻이다.

n>20n > 20인 테스트 케이스는 최대 10개라고 보장된다.

출력

각 테스트 케이스마다 가중치가 있는 나무 지름의 최댓값을 한 줄에 출력한다.

힌트

첫 번째 테스트 케이스에서는 1,3,4,5,2,61, 3, 4, 5, 2, 6 순서로 정점을 고른다. 이렇게 만들어진 가중치 나무는 아래 그림과 같고, 가장 긴 단순 경로의 길이는 1616이다.

예제1

  1. 예제 1

    입력
    2
    5
    1 7 3 5 4
    1 3
    2 3
    3 4
    4 5
    4 6
    1
    1000000000
    1 2
    
    예상 출력
    16
    1000000000