만드는 중입니다

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

트리 경로의 k번째 작은 가중치

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

요약
두 정점 사이의 유일한 트리 경로에서 k번째로 작은 정점 가중치를 각 질의마다 출력한다.
난이도

어려움10점 중 8점

유형
트리, 이분 탐색, 누적 합, 구현
정답자
아직 제출이 없습니다

문제

정점이 NN개인 트리가 있다. 트리는 사이클이 없는 연결 무방향 그래프이다. 정점 번호는 1번부터 NN번까지이고, 간선 번호는 1번부터 N−1N-1번까지이다. 각 정점에는 가중치가 하나씩 붙어 있다.

다음 쿼리를 처리하는 프로그램을 작성하시오.

  • u v k: 정점 uu에서 정점 vv로 가는 경로 위에 있는 정점의 가중치 중 kk번째로 작은 값을 출력한다.

트리에서 두 정점을 잇는 경로는 하나뿐이고, 그 경로에는 양 끝 정점 uu와 vv도 포함된다. 같은 가중치가 여러 정점에 나오면 나온 횟수만큼 따로 세어 순위를 매긴다. 예를 들어 경로 위의 가중치가 3, 7, 7, 9라면 2번째로 작은 값과 3번째로 작은 값은 모두 7이다.

입력

첫째 줄에 정점의 개수 NN이 주어진다. (2≤N≤100,0002 \le N \le 100{,}000)

둘째 줄에 1번 정점부터 NN번 정점까지의 가중치가 순서대로 주어진다. 가중치는 1,000,0001{,}000{,}000보다 작거나 같은 자연수이다.

셋째 줄부터 N−1N-1개의 줄에 ii번 간선이 잇는 두 정점의 번호 uu와 vv가 주어진다.

다음 줄에 쿼리의 개수 MM이 주어진다. (1≤M≤100,0001 \le M \le 100{,}000)

다음 MM개의 줄에 쿼리가 한 줄에 하나씩 u v k 형식으로 주어진다. uu와 vv는 정점 번호이고 서로 같아도 된다. kk는 uu에서 vv로 가는 경로 위의 정점 개수보다 크지 않은 자연수이다.

출력

각 쿼리의 답을 입력에 주어진 순서대로 한 줄에 하나씩 출력한다.

예제2

  1. 예제 1

    입력
    8
    105 2 9 3 8 5 7 7
    1 2
    1 3
    1 4
    3 5
    3 6
    3 7
    4 8
    5
    2 5 1
    2 5 2
    2 5 3
    2 5 4
    7 8 2
    
    예상 출력
    2
    8
    9
    105
    7
    
  2. 예제 2

    입력
    2
    1000000 1
    1 2
    5
    1 1 1
    2 2 1
    1 2 1
    1 2 2
    2 1 2
    
    예상 출력
    1000000
    1
    1
    1000000
    1000000