@Override

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

요약
정점 i를 루트로 하는 서브트리의 모든 정점 가중치를 i의 조상 가중치 최댓값으로 덮어쓰는 갱신과 서브트리 가중치 합을 구하는 질의를 처리한다.
난이도

어려움10점 중 8점

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

문제

11번 정점을 루트로 하는 트리가 있다. 트리는 총 NN개의 정점으로 구성된다.

각 정점 ii는 정수로 이루어진 가중치 A_iA\_i를 가지고 있으며, 기본적으로 자신의 가중치인 A_iA\_i를 사용한다.

아래 두 가지 종류의 쿼리를 처리하는 프로그램을 작성하시오.

  • 11 ii: 정점 ii를 루트로 하는 서브 트리의 모든 정점 vv에 대하여, ii의 조상의 가중치 중 최댓값을 각 A_vA\_v에 덮어쓴다. 정점 ii는 ii의 조상이 아니다.(2≤i≤N)(2 \le i \le N)
  • 22 ii: 정점 ii를 루트로 하는 서브 트리의 모든 정점의 가중치의 합을 출력한다. (1≤i≤N)(1 \le i \le N)

입력

첫째 줄에 정점의 개수 NN과 쿼리의 개수 QQ가 공백으로 구분되어 주어진다. (2≤N≤500,000; 1≤Q≤500,000)(2 \le N \le 500\\,000;\ 1 \le Q \le 500\\,000)

둘째 줄에 각 정점의 가중치 A_1,A_2,⋯ ,A_NA\_1, A\_2, \cdots, A\_N이 공백으로 구분되어 주어진다. (−109≤A_i≤109)(-10^9 \le A\_i \le 10^9)

다음 N−1N - 1개의 줄에 트리의 간선을 나타내는 두 정점 u, vu,\ v가 공백으로 구분되어 주어진다. (1≤u, v≤N; u≠v)(1 \le u,\ v \le N;\ u \ne v)

이어서 QQ개의 줄에 걸쳐 쿼리가 한 줄에 하나씩 주어진다.

22번 쿼리가 하나 이상 주어짐이 보장된다.

입력되는 모든 수는 정수이다.

출력

모든 22번 쿼리의 결과를 입력된 순서대로 각 줄에 하나씩 출력한다.

예제2

  1. 예제 1

    입력
    10 8
    7 5 1 5 6 9 3 8 0 4
    1 3
    2 6
    4 3
    3 10
    6 8
    7 5
    8 5
    5 9
    9 10
    1 9
    2 8
    1 2
    1 10
    2 5
    1 3
    2 9
    2 3
    
    예상 출력
    21
    35
    42
    63
    
  2. 예제 2

    입력
    2 2
    -1 1000
    1 2
    1 2
    2 1
    
    예상 출력
    -2