문제 분류 수업 진도 대회 채점현황 순위 질문게시판
게임
스도쿠 타이핑 리듬 타자게임 타이핑 테트리스 타이핑 인베이더 타이핑 지뢰찾기 8192 공룡게임 타이핑 플래피버드 랭킹
로그인

8056 : 트리 경로 가중치 쿼리

•시간제한: 3.000 S •메모리제한: 256 MB •제출: 0 •통과: 0 •만든사람: suakii

8056 : 트리 경로 가중치 쿼리

시간 3.000s · 메모리 256MB · 제출 0 · 정답 0

문제 설명

$N$개의 노드로 이루어진 트리가 주어집니다. 각 노드 $i$는 초기 가중치 $v_i$를 가집니다. 루트 노드는 항상 $1$번 노드입니다.
다음 두 가지 쿼리를 효율적으로 처리하는 프로그램을 작성하십시오.
- `1 s x`: 노드 $s$의 가중치를 $x$로 변경합니다.
- `2 u`: 루트($1$번 노드)에서 노드 $u$까지의 경로 상에 있는 모든 노드의 가중치 합을 출력합니다.



[제약 조건]
• $1 \le N, Q \le 200{,}000$
• $1 \le v_i \le 10^9$
• $1 \le a, b \le N$
• $1 \le s, u \le N$, $1 \le x \le 10^9$

입력 설명

첫째 줄에 노드의 수 $N$과 질의의 수 $Q$가 공백으로 구분되어 주어집니다. ($1 \le N, Q \le 200{,}000$)
둘째 줄에 각 노드의 초기 가중치 $v_1, v_2, \dots, v_N$이 공백으로 구분되어 주어집니다. ($1 \le v_i \le 10^9$)
다음 $N-1$개의 줄에 트리의 간선을 나타내는 두 노드 $a, b$가 공백으로 구분되어 주어집니다. ($1 \le a, b \le N$)
다음 $Q$개의 줄에 걸쳐 질의 정보가 주어집니다. 각 질의는 `1 s x` 또는 `2 u` 형식입니다. ($1 \le s, u \le N, 1 \le x \le 10^9$)

출력 설명

각 `2 u` 질의에 대해 가중치 합을 한 줄에 하나씩 순서대로 출력합니다. (가중치 합은 64비트 정수 범위를 가질 수 있습니다.)

입력 예시
COPY
복사되었습니다!

5 3
4 2 5 2 1
1 2
1 3
2 4
3 5
1 3 10
2 4
2 5

출력 예시
COPY
복사되었습니다!

8
15

도움

오일러 경로 테크닉(Euler Tour Technique)을 사용하여 트리를 구간(배열)으로 변환합니다. 노드 $s$의 가중치 변경 $x$는 $s$의 서브트리 구간 `[in[s], out[s]]` 전체에 더해지는 가중치 변화량($x - v_s$)의 구간 갱신에 대응됩니다. 펜윅 트리(BIT)를 이용하여 구간 업데이트 및 점 쿼리를 $O(\log N)$에 처리할 수 있습니다.

출처/분류

NOTICE  —  BFStudy OJ 정보샘
애들아, 문제 많이 풀고 게임 잠깐 하는거지?
— 정보샘