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

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

트리 경로에서 K번째로 작은 수

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

요약
가중 트리에서 두 정점 사이 경로에 있는 정점 가중치 중 K번째로 작은 값을 각 질의마다 구합니다.
난이도

어려움10점 중 8점

유형
세그먼트 트리, 트리, 정렬
정답자
아직 제출이 없습니다

문제

1번부터 N번까지 번호가 붙은 N개의 정점과 N-1개의 간선으로 이루어진 트리가 있다. 각 정점에는 가중치가 하나씩 있다. 이 트리에 대해 M개의 질의를 주어진 순서대로 처리한다.

질의 X Y K는 정점 X와 정점 Y를 잇는 경로 위의 정점 가중치 중 K번째로 작은 값을 묻는다. 경로에는 양 끝 정점 X와 Y도 포함된다.

입력

첫째 줄에 두 정수 N과 M이 주어진다. (1≤N,M≤100 0001 \le N, M \le 100\,000)

둘째 줄에 정점의 가중치를 나타내는 N개의 정수가 주어진다. i번째 정수는 i번 정점의 가중치다. 가중치는 모두 서로 다르고, 부호 있는 32비트 정수 범위에 들어간다.

다음 N-1개의 줄에는 각각 두 정수 X와 Y가 주어진다. 정점 X와 정점 Y가 간선으로 이어져 있다는 뜻이다.

다음 M개의 줄에는 각각 세 정수 X, Y, K가 주어진다. X와 Y는 1 이상 N 이하다. K는 1 이상이고, 정점 X와 정점 Y를 잇는 경로 위의 정점 개수 이하다. X와 Y가 같으면 그 경로 위의 정점은 1개로 본다.

출력

질의마다 답을 한 줄에 하나씩, 입력에 주어진 순서대로 출력한다.

예제6

  1. 예제 1

    입력
    3 2
    1 2 3
    1 2
    3 1
    2 3 1
    1 3 2
    
    예상 출력
    1
    3
    
  2. 예제 2

    입력
    1 3
    42
    1 1 1
    1 1 1
    1 1 1
    
    예상 출력
    42
    42
    42
    
  3. 예제 3

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

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

    입력
    6 7
    10 60 20 50 30 40
    1 2
    1 3
    1 4
    1 5
    1 6
    2 3 1
    2 3 2
    2 3 3
    4 6 2
    5 5 1
    2 2 1
    6 4 3
    
    예상 출력
    10
    20
    60
    40
    30
    60
    50
    
  6. 예제 6

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