만드는 중입니다

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

오렌지 농장 시뮬레이션

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

요약
트리 구조의 각 도로를 끊었을 때 양쪽으로 나뉘는 두 필드 경쟁력 값의 XOR 최댓값을 구합니다.
난이도

어려움10점 중 8점

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

문제

브루는 오렌지 농장 시뮬레이션 게임을 하고 있다. 오랜 시간 게임을 진행하면서 브루는 농장에 오렌지 밭 NN개를 만들었고, 이 밭들을 N−1N-1개의 도로로 연결해 어느 밭에서든 다른 모든 밭으로 갈 수 있게 했다.

농장의 규모가 커지자 브루는 도로 하나를 끊어 농장을 둘로 나누려고 한다. 농장을 둘로 나누면 양쪽이 동시에 성장하므로 효율이 높아진다. 다만 농장이 둘로 나뉘면 양쪽의 밭들은 경쟁 관계에 놓인다. ii번 밭의 경쟁력은 AiA_i이고, ii번 밭과 jj번 밭이 경쟁 관계이면 두 밭 사이의 경쟁 지수는 Ai⊕AjA_i \oplus A_j이다. 여기서 ⊕\oplus는 비트 XOR을 뜻한다. 도로 하나를 끊었을 때의 총 경쟁 지수는 그 끊김으로 생기는 모든 경쟁 관계의 경쟁 지수 중 최댓값이다.

예를 들어 위 그림의 농장에서 Ai=iA_i = i이고, 2번 밭과 3번 밭 사이의 도로를 끊어 아래 그림과 같이 되었다고 하자.

이때 생기는 모든 경쟁 관계의 경쟁 지수는 다음과 같다.

  • 3번 밭과 1, 2, 4, 7번 밭의 경쟁 지수: 2, 1, 7, 4
  • 5번 밭과 1, 2, 4, 7번 밭의 경쟁 지수: 4, 7, 1, 2
  • 6번 밭과 1, 2, 4, 7번 밭의 경쟁 지수: 7, 4, 2, 1

이 중 최댓값은 7이므로, 2번 밭과 3번 밭 사이의 도로를 끊었을 때의 총 경쟁 지수는 7이다.

각 도로를 끊었을 때의 총 경쟁 지수를 모두 계산하는 프로그램을 작성해야 한다.

입력

첫 줄에는 오렌지 밭의 수 NN이 주어진다.

둘째 줄에는 각 밭의 경쟁력 A1,A2,⋯ ,ANA_1, A_2, \cdots, A_N이 주어진다.

셋째 줄부터 N+1N+1번 줄까지, i+2i+2번 줄에는 ii번 도로가 잇는 두 밭의 번호 uiu_i, viv_i가 ui viu_i \ v_i의 형태로 주어진다.

출력

각 도로를 끊었을 때의 총 경쟁 지수를 1번 도로부터 N−1N-1번 도로까지 차례로 한 줄에 하나씩 출력한다.

제한

  • 2≤N≤2×1052 \le N \le 2 \times 10^5
  • 0≤Ai<2200 \le A_i < 2^{20}
  • 1≤ui,vi≤N1 \le u_i, v_i \le N
  • ui≠viu_i \ne v_i
  • 주어진 도로를 통해 모든 밭 사이를 오갈 수 있다.

예제1

  1. 예제 1

    입력
    7
    1 2 3 4 5 6 7
    1 2
    2 3
    2 4
    3 5
    3 6
    4 7
    
    예상 출력
    7
    7
    7
    7
    7
    6