트리와 색깔과 쿼리

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

요약
루트가 있는 트리에서 각 정점의 색을 관리하며, 서브트리와 경로에 대해 색별 개수에 순열 값을 곱한 합을 구하고 색 갱신을 처리한다.
난이도

어려움10점 중 9점

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

문제

NN개의 정점으로 구성된 트리가 주어진다. 각 정점에는 11번부터 NN번까지 번호가 붙어 있고, 11번 정점은 트리의 루트이다. 추가로 각 정점은 색깔 A_iA\_i를 가지고 있다. 정점의 색깔은 11 이상 50 00050\ 000 이하의 정수로 나타내어진다.

다음 세 가지 쿼리를 수행하는 프로그램을 작성하시오. P=P_0,P_1,⋯ ,P_NP = P\_0, P\_1, \cdots, P\_N는 00부터 NN까지의 정수가 한 번씩 등장하는 순열이며, 입력에서 주어진다.

  • 1 xx: 정점 xx를 루트로 하는 서브트리에 색깔이 ii인 정점의 수를 C_iC\_i라고 할 때 ∑i⋅P_C_i\sum i \cdot P\_{C\_i}를 출력한다.
  • 2 xx yy: 두 정점 xx와 yy를 잇는 경로에 색깔이 ii인 정점의 수를 C_iC\_i라고 할 때 ∑i⋅P_C_i\sum i \cdot P\_{C\_i}를 출력한다.
  • 3 xx zz: 정점 xx의 색깔을 zz로 바꾼다.

입력

첫 번째 줄에 정수 NN, QQ가 공백으로 구분되어 주어진다. (2≤N,Q≤50 000)(2\le N, Q\le 50\ 000)  

두 번째 줄에 NN개의 정수 A_1,A_2,⋯ ,A_NA\_1, A\_2, \cdots, A\_N이 공백으로 구분되어 주어진다. (1≤A_i≤50 000)(1\le A\_i\le 50\ 000)  

세 번째 줄에 NN개의 정수 P_1,P_2,⋯ ,P_NP\_1, P\_2, \cdots, P\_N이 공백으로 구분되어 주어진다. P_0=0P\_0 = 0이며, PP는 순열이다.

네 번째 줄부터 N−1N-1개의 줄에 걸쳐 트리에서 ii번째 간선이 연결하는 두 정점 번호 u_i,v_iu\_i, v\_i가 공백으로 구분되어 주어진다. (1≤u_i,v_i≤N)(1\le u\_i,v\_i\le N)

이어서 QQ개의 줄에 각 쿼리가 다음 형식 중 하나로 주어진다. (1≤x,y≤N;(1\le x, y\le N; 1≤z≤50 000;1\le z\le 50\ 000; x,y,zx, y, z는 정수))

  • 1 xx
  • 2 xx yy
  • 3 xx zz

출력

11번과 22번 쿼리의 결과를 한 줄에 하나씩 출력한다. 11번 혹은 22번 쿼리가 11개 이상 주어짐이 보장된다.

예제2

  1. 예제 1

    입력
    2 12
    8 10
    1 2
    1 2
    1 1
    2 1 2
    3 1 2
    2 1 1
    1 2
    1 2
    2 1 2
    3 1 4
    3 2 9
    2 2 2
    3 1 20
    1 2
    
    예상 출력
    18
    18
    2
    10
    10
    12
    9
    9
    
  2. 예제 2

    입력
    5 11
    1 2 3 4 5
    5 4 1 3 2
    1 2
    2 3
    3 4
    4 5
    1 1
    1 2
    3 1 2
    1 1
    3 1 3
    1 1
    3 1 1
    2 1 4
    1 5
    3 2 5
    1 1
    
    예상 출력
    75
    70
    68
    67
    50
    25
    60