만드는 중입니다

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

Mexor 트리

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

요약
트리에서 경로에 XOR을 적용하는 갱신을 모두 처리한 뒤, 각 정점까지 S에서 이어지는 경로의 값에 없는 가장 작은 음이 아닌 정수를 구합니다.
난이도

보통10점 중 7점

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

문제

정점 NN개로 이루어진 트리가 주어진다. 정점 ii의 값은 aia_i이다.

다음 쿼리가 총 MM개 주어진다.

  • xx yy zz: 정점 xx와 yy를 잇는 단순 경로 위의 각 정점 값을 그 값과 zz의 XOR 연산 결과로 바꾼다.

MM개의 쿼리를 모두 처리한 뒤, 수열 bib_i를 다음과 같이 정의한다.

  • bib_i는 정점 SS와 정점 ii를 잇는 단순 경로 위 정점들의 값에 나타나지 않는 음이 아닌 정수 중 가장 작은 값이다. (1≤i≤N)(1 \leq i \leq N)

모든 bib_i를 구한다.

입력

첫째 줄에 정수 NN과 SS가 공백으로 구분되어 주어진다. (1≤N≤300 000,1≤S≤N)(1 \leq N \leq 300\,000, 1 \leq S \leq N)

둘째 줄에 수열 a1,a2,⋯ ,aNa_1, a_2, \cdots, a_N이 공백으로 구분되어 주어진다. (0≤ai≤N)(0 \leq a_i \leq N)

셋째 줄부터 N−1N-1개의 줄에 걸쳐 트리의 간선을 나타내는 두 정수 u,vu, v가 공백으로 구분되어 주어진다. 이는 정점 uu와 정점 vv를 잇는 간선이다. (1≤u,v≤N)(1 \leq u,v \leq N)

N+2N+2번째 줄에 쿼리 개수 MM이 주어진다. (1≤M≤300 000)(1 \leq M \leq 300\,000)

N+3N+3번째 줄부터 MM개의 줄에 걸쳐 쿼리를 나타내는 세 정수 x,y,zx, y, z가 공백으로 구분되어 주어진다. (1≤x,y,z≤N)(1 \leq x,y,z \leq N)

출력

첫째 줄에 수열 b1,b2,⋯ ,bNb_1, b_2, \cdots, b_N을 공백으로 구분하여 출력한다.

예제1

  1. 예제 1

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