만드는 중입니다

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

나무

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

요약
트리에서 두 정점을 잇는 경로의 길이에 두 끝 정점 중 작은 x값을 곱한 값의 최댓값을 구합니다.
난이도

보통10점 중 7점

유형
트리, 유니온 파인드, 정렬
정답자
아직 제출이 없습니다

문제

가이니 예프게니예비치는 오래전부터 나무를 갖고 싶어 했다. 요즘 유행하는 나무는 정점이 nn개이고, 각 정점에는 수 xix_i가 적혀 있다. 드디어 그는 그런 나무를 구입했다. 가게에서 돌아온 그는 이 나무에서 여러 값을 계산하기 시작했다. 모든 계산이 쉬웠지만, 정점 uu와 vv 사이의 경로 path(u,v)path(u, v)를 골라 length(path(u,v))⋅min⁡(xu,xv)length(path(u, v)) \cdot \min(x_u, x_v)의 값을 최대로 만드는 문제에서 막혔다. 여기서 length(path)length(path)는 경로 pathpath의 간선 개수이다. 며칠째 가이니 예프게니예비치는 밖에 나오지 않고 있다. 친구들이 걱정하며 이 문제를 풀도록 도와 달라고 부탁했다.

입력

첫 번째 줄에 정점의 개수 nn (1≤n≤1051 \le n \le 10^5)이 주어진다. 두 번째 줄에는 nn개의 정수 xix_i (1≤xi≤1091 \le x_i \le 10^9)가 주어지며, xix_i는 정점 ii에 적힌 수이다. 이어서 n−1n-1개의 줄에 나무의 간선을 나타내는 정수 쌍 aia_i, bib_i (1≤ai,bi≤n1 \le a_i, b_i \le n)가 주어진다.

출력

위 조건에서 설명한 값의 최댓값을 출력한다.

예제1

  1. 예제 1

    입력
    8
    9 2 8 8 7 2 1 2
    2 1
    3 1
    4 1
    5 2
    6 4
    7 5
    8 5
    
    예상 출력
    21