아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

주 대가와 리카

시간 제한3초메모리 제한512 MB

요약
각 정점에 값이 있는 루트 트리에서, 서브트리나 경로 위에서 정확히 a번 나타나는 값들의 합과 정확히 b번 나타나는 값들의 합의 최대공약수를 구하는 질의에 답한다.
난이도

어려움10점 중 9점

유형
트리, DFS, 누적 합, 정수론
정답자
아직 제출이 없습니다

문제

모두가 알다시피, 주 대가는 우주에서 가장 강한 사람이다. 그는 세계를 지킬 무한한 힘을 가진다.

주 대가의 정원에는 마법의 뿌리 있는 트리가 자란다. 트리는 nn개의 정점과 n−1n - 1개의 간선으로 이루어져 있다. 트리의 뿌리는 정점 11이다. 각 정점 ii에는 a_ia\_i만큼의 주 파워가 담겨 있다.

꼬마 리카는 호기심 많은 소녀로, 주 대가에게 물어볼 질문이 mm개 있다. 하지만 지금 주 대가는 세계를 지키느라 바쁘기 때문에, 리카의 질문에 답하는 일을 당신에게 맡기려 한다.

리카의 각 질문은 "tt uu vv aa bb" 형식이다.

  • tt가 11이면 uu는 vv와 같고, 리카는 정점 uu를 뿌리로 하는 부분 트리를 보며 S_aS\_a와 S_bS\_b의 최대공약수(GCD)를 알고 싶어 한다. 여기서 S_aS\_a는 이 부분 트리에서 정확히 aa번 나타나는 수들의 합이고, S_bS\_b는 정확히 bb번 나타나는 수들의 합이다.
  • tt가 22이면 리카는 정점 uu와 vv 사이의 단순 경로를 보며 T_aT\_a와 T_bT\_b의 최대공약수를 알고 싶어 한다. 여기서 T_aT\_a는 이 경로에서 정확히 aa번 나타나는 수들의 합이고, T_bT\_b는 정확히 bb번 나타나는 수들의 합이다.

여기서 모든 xx에 대해 GCD(x,0)=GCD(0,x)=x\mathrm{GCD} (x, 0) = \mathrm{GCD} (0, x) = x로 정의한다.

입력

첫째 줄에는 테스트 케이스의 수 TT가 주어진다 (1≤T≤101 \le T \le 10).

각 테스트 케이스의 첫째 줄에는 두 정수 nn과 mm이 주어진다. 각각 마법의 트리에 있는 정점의 수와 리카의 질문 수이다 (1≤n,m≤1051 \le n, m \le 10^5).

다음 줄에는 nn개의 정수 a_1a\_1, a_2a\_2, …\ldots, a_na\_n이 주어진다. 각 정점에 담긴 주 파워의 양이다 (1≤a_i≤1091 \le a\_i \le 10^9).

다음 n−1n - 1개의 줄에는 각각 두 정수 uu와 vv가 주어지며, 정점 uu와 vv를 잇는 간선을 나타낸다 (1≤u,v≤n1 \le u, v \le n). 이 간선들이 트리를 이룬다는 것이 보장된다.

다음 mm개의 줄에는 위에서 설명한 형식의 리카의 질문이 하나씩 주어진다 (1≤u,v≤n1 \le u, v \le n, 1≤a,b≤n1 \le a, b \le n).

출력

리카의 각 질문에 대해 답을 한 줄에 하나씩 출력한다.

예제1

  1. 예제 1

    입력
    1
    5 5
    1 2 4 1 2
    1 2
    2 3
    3 4
    4 5
    1 1 1 1 1
    1 1 1 1 2
    2 1 5 1 1
    2 1 5 1 2
    2 1 1 2 2
    
    예상 출력
    4
    1
    4
    1
    0