거의 깨끗한 돈의 트리
시간 제한4초메모리 제한256 MB
생성식으로 만든 최대 1000개의 정점 덧셈을 트리에 반영하고 두 정점 사이 경로 합을 연산마다 구합니다.
문제
정점 개로 이루어진 트리에서 돈이 자란다. 정점에는 번부터 번까지 번호가 붙어 있고, 번 정점이 루트다. 번을 제외한 모든 정점 에는 부모 가 있으며 를 만족한다. 처음에 정점 에는 화폐 단위가 들어 있다.
어떤 조직이 이 트리에 연산 개를 수행한다. 각 연산은 두 단계로 이루어진다.
- 트리에서 정점 개 를 고른다 (). 같은 정점을 여러 번 골라도 된다. 인 각 에 대해 정점 에 화폐 단위를 더한다.
- 정점 두 개 와 를 고른다 (). 와 를 잇는 유일한 경로 위에 놓인 정점에 들어 있는 화폐의 총합을 구한다. 양 끝인 와 도 경로에 포함한다.
각 연산의 2단계 답을 구하라.
제한은 다음과 같다.
입력
첫째 줄에 정점의 개수 이 주어진다. 다음 개의 줄에는 트리의 간선 하나를 나타내는 두 정수 와 가 공백으로 구분되어 주어진다. 다음 줄에는 각 정점의 처음 금액 이 공백으로 구분되어 주어진다.
다음 줄에는 연산의 개수 가 주어진다. 이어지는 개의 줄에는 연산 하나가 정수 아홉 개로 주어지며, 순서는 , , , , , , , , 이다 (). 직접 주어지는 값은 과 뿐이고, 인 나머지는 다음 식으로 만든다.
출력
개의 줄을 출력한다. 번째 줄에는 번째 연산의 2단계 답을 출력한다. 1단계에서 더한 금액은 정점에 그대로 남으므로, 각 연산은 앞선 연산의 1단계와 자기 자신의 1단계를 모두 반영한 상태에서 답을 계산한다.
답은 32비트 정수의 범위를 넘을 수 있다.
힌트
첫 번째 예제의 연산 1은 , 이므로 정점 에 값 을 1000번 더한다. 번과 번을 잇는 경로는 정점 , , 를 지나고, 세 정점에 든 금액의 합은 이다.
연산 2에서는 , , , 가 되고, 번과 번을 잇는 경로는 트리의 정점을 모두 지난다.
연산 3은 이므로 , , , 를 쓰지 않는다.