만드는 중입니다

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

함수의 맛

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

요약
함수 f와 각 노드의 가중치를 바꾸는 갱신을 처리하고, 시작 노드 x에서 한 번씩만 방문하는 노드들의 가중치 합을 구합니다.
난이도

어려움10점 중 9점

유형
그래프, 트리, DFS
정답자
아직 제출이 없습니다

문제

인덱스 트리 상인 탐레프는 인덱스국이 멸망한 뒤 아무도 인덱스 트리를 사 가지 않자, 인기 간식인 함수 f:{1,…,N}→{1,…,N}f: \{1, \ldots, N\} \to \{1, \ldots, N\}을 만들어 판다.

레프가 파는 함수에서 자연수 1,…,N1, \ldots, N의 맛은 각각 A1,…,ANA_1, \ldots, A_N으로 알려져 있다. 이 값은 재료의 품질에 따라 매일 바뀐다. 함수를 먹을 때는 마음에 드는 자연수 xx를 골라 x,f(x),f(f(x)),…x, f(x), f(f(x)), \ldots를 차례로 먹는다. 단, 같은 수는 두 번 먹지 않는다. 즉, 각 i=1,…,Ni = 1, \ldots, N에 대해 i=fk(x)i = f^k(x)인 k≥0k \ge 0이 존재하면 자연수 ii를 먹는다. 이렇게 먹은 모든 자연수의 맛을 합한 값이 함수의 맛이다.

레프는 숙련된 주방장이 아니라서 ff의 구조를 종종 바꾼다. 대신 손님이 'xx부터 먹기 시작하면 이 함수의 맛은 얼마인가요?'라고 물으면 빠르게 답할 수 있는 기계를 만들기로 했다.

입력

첫째 줄에 함수의 정의역과 공역의 크기 NN과 쿼리의 수 QQ가 공백으로 구분되어 주어진다. 둘째 줄에는 f(1),…,f(N)f(1), \ldots, f(N)이 공백으로 구분되어 주어진다. 셋째 줄에는 A1,…,ANA_1, \ldots, A_N이 공백으로 구분되어 주어진다. 넷째 줄부터 QQ줄에 걸쳐 다음 쿼리가 주어진다.

  • 1 i j: f(i)f(i)를 jj로 바꾼다. (1≤i,j≤N1 \le i, j \le N)
  • 2 i x: 자연수 ii의 맛 AiA_i를 xx로 바꾼다. (1≤i≤N1 \le i \le N, 1≤x≤1091 \le x \le 10^9)
  • 3 x: 자연수 xx부터 먹기 시작했을 때 이 함수의 맛을 출력한다. (1≤x≤N1 \le x \le N)

출력

3번 쿼리마다 답을 한 줄에 하나씩 출력한다.

제한

  • 1≤N,Q≤200,0001 \le N, Q \le 200{,}000
  • 1≤Ai≤1091 \le A_i \le 10^9 (1≤i≤N1 \le i \le N)
  • 3번 쿼리가 하나 이상 주어진다.

예제2

  1. 예제 1

    입력
    3 5
    1 1 2
    2 4 8
    3 3
    2 1 1
    3 3
    1 3 1
    3 3
    
    예상 출력
    14
    13
    9
    
  2. 예제 2

    입력
    10 16
    9 1 2 8 7 5 10 3 8 4
    3 1 6 14 7 9 12 2 12 11
    3 6
    2 4 11
    3 9
    2 9 3
    1 2 4
    3 8
    3 2
    2 4 7
    1 4 6
    3 4
    2 5 1
    1 5 10
    1 3 8
    2 1 5
    3 3
    3 9
    
    예상 출력
    77
    24
    20
    20
    46
    8
    11