점수 계산하기

아직 제출이 없습니다시간 제한2초메모리 제한1024 MB

문제

당신은 직원의 점수를 관리하는 프로그램을 만들고 있다. 회사의 조직도는 각 직원이 노드고 직속 상사가 부모 노드인 트리 형태로 나타낼 수 있다. 이 트리의 루트는 사장이다.

이 프로그램은 각 직원에게 두 가지의 점수를 부여한다. 하나는 그 직원이 얻게 되는 scorescore, 다른 하나는 특정 직원이 scorescore를 얻었을 때 그 직원을 의미하는 노드의 조상들이 받게 되는 bonusbonus 점수다. 만약 특정 직원이 xx만큼의 scorescore를 얻는다면, 그 직원을 의미하는 노드의 조상 노드들은 모두 xx만큼의 bonusbonus 점수를 얻게 된다.

이 프로그램을 이용하려는 회사에서 요구조건이 하나 생겼다. 바로 사장이 바뀌면 간선은 모두 유지하면서 그 사장을 루트로 하는 새로운 트리를 만든 뒤, 각 직원의 bonusbonus를 초기화하고 기존 scorescore를 이용해 새로운 트리에서 직원의 점수를 다시 계산해달라는 것이다.

예를 들어, 위와 같은 상황을 보자. 위 그림에서 노드 안의 수는 노드의 번호, 노드 옆의 작은 수는 그 노드의 scorescore를 의미한다.

그림처럼 11번 노드가 루트인 상황에서 33번 노드의 점수는 33번 노드의 scorescore4747점과, 44번 노드가 1818만큼의 scorescore를 얻으며 그 조상 노드가 얻게 된 1818만큼의 bonusbonus 점수가 합쳐진 6565점이 된다.

그런데 만약 루트를 55번으로 바꾼다면 트리의 형태가 위와 같이 변하게 된다. 이때 22번 노드의 점수를 구해보면 22번 노드의 scorescore1616점과, 11, 33, 44번 노드가 각각 scorescore를 얻을 때 22번 노드가 같이 얻게 되는 4343, 4747, 1818bonusbonus가 더해져 총 124124점이 된다.

위와 같은 경우들을 처리하기 위해 우리는 트리와 각 직원이 직접 받은 점수가 주어진 상황에서 아래와 같은 질의를 QQ번 처리해야 한다.

  • rr vv: rr번 노드가 루트일 때 vv번 직원의 점수

질의들이 주어질 때, 각 질의의 정답을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 노드의 수 NN과 질의의 수 QQ가 공백으로 구분되어 주어진다. (1N100,000;(1 \le N \le 100\\,000; 1Q100,000)1 \le Q \le 100\\,000)

둘째 줄에 11번 직원부터 NN번 직원까지 순서대로 각 직원이 얻은 scorescore가 공백으로 구분되어 주어진다. (0score10,000)(0 \le score \le 10\\,000)

셋째 줄부터 N1N - 1줄에 걸쳐 트리의 간선 정보를 의미하는 u,vu, v가 공백으로 구분되어 주어진다. (1u,vN)(1 \le u, v \le N)

그리고 QQ개의 줄에 걸쳐 문제에 제시된 질의가 주어진다.

주어지는 그래프는 트리이다.

출력

각 질의의 정답을 한 줄에 하나씩 입력받은 순서대로 출력한다.