만드는 중입니다

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

방어 타워

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

요약
트리의 각 도시마다 가장 강한 방어 탑의 번호를 구하고, 업그레이드 명령마다 그 번호들의 합을 출력합니다.
난이도

어려움10점 중 9점

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

문제

ICPCCamp에는 1,2,…,n1, 2, \dots, n 번호가 붙은 nn개의 도시가 있으며, (n−1)(n - 1)개의 양방향 도로로 연결되어 있다. 서로 다른 두 도시 사이의 경로는 정확히 하나이다.

도시 ii에는 power가 aia_i인 방어 타워가 있다. 타워는 n,(n−1),…,1n, (n - 1), \dots, 1 순서로 지어졌고, 타워 번호는 도시 번호와 같다. 따라서 타워 nn이 가장 오래된 타워이고 타워 11이 가장 새로운 타워이다. 타워 ii가 도시 jj에 주는 효과는 eff(i,j)=ai−δ(i,j)\mathit{eff}(i, j) = a_i - \delta(i, j)이다. 여기서 δ(i,j)\delta(i, j)는 도시 ii와 jj 사이의 도로 수다. 도시 jj의 수호자는 jj에 대한 효과가 가장 큰 타워다. 여러 타워의 효과가 같으면 그중 가장 오래된 타워가 수호자가 된다.

Yuuka는 방어 타워의 power를 올리는 명령을 qq번 내린다. kk번째 명령은 타워 wkw_k의 power에 dkd_k를 더한다. 명령을 처리할 때마다 모든 도시 수호자 번호의 합을 구하려 한다. 강화된 타워는 자동으로 가장 새로운 타워가 된다.

다만 강화에는 비용이 든다. 강화 대상 타워가 자기 도시의 수호자가 아니거나 dk=0d_k = 0이면, 그 명령은 무시된다.

입력

입력에는 0개 이상의 테스트 케이스가 들어 있으며, 파일의 끝에서 끝난다. 각 테스트 케이스는 다음과 같다.

첫째 줄에 두 정수 nn, qq (1≤n,q≤1051 \leq n, q \leq 10^5)가 주어진다.

둘째 줄에 nn개의 정수 a1,a2,…,ana_1, a_2, \dots, a_n (0≤ai≤1090 \leq a_i \leq 10^9)이 주어진다.

이어지는 n−1n - 1개의 줄에는 정수 uiu_i, viv_i (1≤ui,vi≤n1 \leq u_i, v_i \leq n)가 주어지며, 도시 uiu_i와 viv_i를 잇는 도로가 있음을 뜻한다. 서로 다른 두 도시 사이의 경로는 정확히 하나이다.

마지막 qq개의 줄에는 정수 wkw_k, dkd_k (1≤wk≤n1 \leq w_k \leq n, 0≤dk≤1090 \leq d_k \leq 10^9)가 주어진다.

모든 테스트 케이스에 걸쳐 nn의 합과 qq의 합은 각각 10510^5를 넘지 않는다.

출력

각 테스트 케이스마다 qq개의 정수 s1,s2,…,sqs_1, s_2, \dots, s_q를 출력한다. sks_k는 kk번째 명령을 처리한 뒤 모든 수호자 번호의 합이다.

예제1

  1. 예제 1

    입력
    3 3
    1 1 0
    1 3
    2 3
    1 2
    2 2
    3 1000000000
    4 2
    2 4 4 4
    4 1
    4 2
    3 1
    2 4
    2 3
    
    예상 출력
    4
    4
    4
    8
    8