나무 물 주기

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

요약
정점에 물을 주면 열매가 흡수하고 남은 양을 자식 수로 나눈 몫이 자식들에게 흘러가는 과정을 시뮬레이션하며, 열매 크기 질의에 답한다.
난이도

보통10점 중 7점

유형
트리, 시뮬레이션, DFS, 구현
정답자
아직 제출이 없습니다

문제

목이 마른 나무에게 물을 주자!

나무는 NN개의 정점과 (N−1)(N-1)개의 간선으로 이루어져 있으며, 어느 두 정점 간에도 단순 경로가 유일하게 존재하는 그래프를 의미한다. 11번 정점을 나무의 뿌리라고 부르자. 또 ii번 정점과 직접 연결되어 있으면서 뿌리와의 단순 경로의 길이가 ii번 정점보다 더 큰 정점을 ii번 정점의 자식 정점이라고 부르자.

각 정점에는 열매가 하나씩 있다. 열매에 물을 주면 자신의 크기만큼 물을 흡수할 수 있고, 물을 주면 가능한 최대로 흡수한다. 또한 흡수한 물의 양만큼 열매의 크기가 커진다.

자식 정점이 하나 이상 있다면, 열매가 흡수하고 남은 물은 간선으로 이어진 자식 정점으로 나눠서 흘러간다.

이때 각 자식 정점에게 흘러가는 물의 양은 ⌊남은 물의 양자식 정점의 수⌋\left\lfloor {\frac{\text{남은 물의 양}}{\text{자식 정점의 수}}} \right\rfloor이다.

나무에게 물을 주기 위해 QQ개의 쿼리를 수행하라.

  • 1 u x: 정점 uu에 xx만큼의 물을 준다. (1≤u≤N1\le u\le N; 1≤x≤1091\le x\le 10^9)
  • 2 u: 정점 uu의 열매의 크기를 출력한다. (1≤u≤N1\le u\le N)

입력

첫째 줄에 정점의 개수 NN과 쿼리의 개수 QQ가 공백을 사이에 두고 주어진다. (1≤N≤100,0001\le N\le 100\\, 000; 1≤Q≤100,0001\le Q\le 100\\, 000)

둘째 줄부터 (N−1)(N-1)개의 줄에 걸쳐 간선을 이루는 두 정점 uu와 vv가 공백을 사이에 두고 주어진다. (1≤u,v≤N1\le u,v\le N; u≠vu\neq v)

(N+1)(N+1)째 줄에는 각 정점의 열매의 크기를 의미하는 NN개의 양의 정수 x_1x\_1, x_2x\_2, ⋯\cdots, x_Nx\_N이 공백을 사이에 두고 주어진다. (1≤x_i≤1091\le x\_i\le 10^9)

(N+2)(N+2)째 줄부터 QQ개의 줄에 걸쳐 쿼리가 주어진다. 각 쿼리는 1 u x 또는 2 u이다. (1≤u≤N1\le u\le N; 1≤x≤1091\le x\le 10^9)

모든 입력은 정수이고, 2번 쿼리는 한 번 이상 주어진다.

출력

주어진 2번 쿼리마다, 해당 쿼리의 정답을 한 줄에 하나씩 출력한다.

힌트

⌊x⌋\lfloor{x}\rfloor는 xx보다 작거나 같은 가장 큰 정수를 의미한다.

예제2

  1. 예제 1

    입력
    1 1
    1
    2 1
    
    예상 출력
    1
    
  2. 예제 2

    입력
    2 2
    1 2
    1 1
    1 1 1
    2 1
    
    예상 출력
    2