트리와 쿼리 18
시간 제한5초메모리 제한512 MB
트리에서 루트를 u로 정한 뒤 v의 서브트리 값을 1 올리는 연산, 두 정점 사이 경로 값을 1 올리는 연산, A_i와 dist(v, i)의 곱의 합을 구하는 연산을 처리합니다.
문제
정점이 개인 트리가 있다. 정점은 1번부터 번까지 번호가 매겨져 있고, 번 정점에는 정수 가 저장되어 있다. 처음에는 모든 가 0이다. ()
다음 형식의 쿼리를 총 번 수행해야 한다.
1 u v: 트리의 루트를 정점 라 하자. 정점 를 루트로 하는 서브트리에 있는 모든 정점 에 대해 에 1을 더한다.2 u v: 정점 에서 정점 로 가는 유일한 경로에 있는 모든 정점 에 대해 에 1을 더한다.3 v: 를 출력한다. 는 정점 에서 정점 로 가는 경로에 있는 간선의 수이다.
입력
첫째 줄에 이 주어진다. ()
다음 개 줄에 트리의 간선이 주어진다. 각 줄에는 공백으로 구분된 두 정수 와 가 주어지며, 두 정점을 잇는 간선이 있다는 뜻이다. ()
다음 줄에는 쿼리의 개수 가 주어진다. ()
다음 개 줄에는 위 형식 중 하나로 쿼리가 한 줄에 하나씩 주어진다. ()
3번 쿼리는 한 번 이상 주어진다.
출력
3번 쿼리의 결과를 입력 순서대로 한 줄에 하나씩 출력한다.