만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

XOR과 집합과 트리와 쿼리

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

요약
정점마다 값이 적힌 트리에서 각 질의 경로의 값들로 만든 닫힌 집합의 최솟값을 구합니다.
난이도

보통10점 중 7점

유형
비트 연산, 트리, DFS
정답자
아직 제출이 없습니다

문제

양의 정수를 원소로 갖는 유한집합 SS에 대해, f(S)f(S)를 아래 조건을 모두 만족하는 유한집합 중 크기가 가장 작은 집합으로 정의한다. 이런 집합은 하나만 존재한다.

  • S⊆f(S)S \subseteq f(S)이다.
  • 임의의 양의 정수 x,yx, y에 대해 x,y∈f(S)x, y \in f(S)이고 x≠yx \neq y이면 x⊕y∈f(S)x \oplus y \in f(S)이다. 여기서 ⊕\oplus는 비트 단위 XOR 연산이다.
  • 임의의 양의 정수 xx에 대해 x∈f(S)x \in f(S)이고 x<21000x < 2^{1000}이면 2x∈f(S)2x \in f(S)이다.
  • 임의의 양의 정수 xx에 대해 2x∈f(S)2x \in f(S)이고 x<21000x < 2^{1000}이면 x∈f(S)x \in f(S)이다.

정점이 NN개인 트리가 있다. 모든 ii (1≤i≤N1 \le i \le N)에 대해 ii번 정점에는 양의 정수 AiA_i가 적혀 있다. 이때 QQ개의 쿼리를 처리해야 한다.

쿼리 u,vu, v에 대해, uu번 정점에서 vv번 정점까지의 최단 경로에 포함되는 정점들의 집합을 PP라고 하자. 이때 집합 f({Ar∣r∈P})f(\{A_r \mid r \in P\})의 원소 중 최솟값을 출력해야 한다.

입력

첫 줄에 정점의 개수 NN과 쿼리의 개수 QQ가 공백으로 구분되어 주어진다.

둘째 줄에는 각 정점에 적힌 양의 정수 A1,A2,…,ANA_1, A_2, \ldots, A_N이 공백으로 구분되어 주어진다.

셋째 줄부터 N−1N - 1개의 줄에는 트리의 간선이 연결하는 두 정점의 번호 aa, bb가 공백으로 구분되어 주어진다.

N+2N + 2번째 줄부터 QQ개의 줄에는 쿼리를 나타내는 두 정수 uu, vv가 공백으로 구분되어 주어진다.

출력

각 쿼리의 답을 한 줄에 하나씩, 총 QQ개의 줄에 출력한다.

제한

  • 1≤N,Q≤100,0001 \le N, Q \le 100{,}000
  • 0<Ai<2300 < A_i < 2^{30} (1≤i≤N1 \le i \le N)
  • 모든 쿼리에서 1≤u,v≤N1 \le u, v \le N

예제2

  1. 예제 1

    입력
    3 2
    15 8 39
    1 2
    1 3
    3 2
    1 3
    
    예상 출력
    1
    5
    
  2. 예제 2

    입력
    7 6
    19 5 27 3 46 57 39
    1 2
    1 3
    1 4
    2 5
    2 6
    3 7
    1 2
    2 2
    2 6
    5 6
    3 4
    3 7
    
    예상 출력
    1
    5
    5
    3
    1
    5