트리 부수기

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

요약
트리를 0번 노드 기준으로 뿌리내린 뒤, 각 노드 x를 제거했을 때 0번에서 도달 가능한 노드 v의 비트를 XOR하여 출력한다.
난이도

어려움10점 중 8점

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

문제

00번부터 N−1N-1번까지 NN개의 노드를 가진 트리가 주어진다. 두 노드 uu와 vv에 대하여 c(u,v)c(u,v)를 다음과 같이 정의하자.

c(u,v)c(u,v)= uu번 노드와 연결된 모든 간선을 제거한 뒤에도 00번 노드와 vv번 노드를 잇는 경로가 존재한다면 11, 그렇지 않다면 00.

N−1N-1자리 이진수로 표현되는 함수 f(x)f(x)를 다음과 같이 정의하자. 여기서 xx는 1≤x≤N−11 \leq x \leq N-1을 만족하는 정수이다.

\[ f(x) = \left( c(x, N-1)c(x, N-2)\dots c(x, 1) \right)_{(2)} \]

예시로 주어진 아래의 트리에서 f(3)f(3)의 값을 구해보자.

33번 노드와 연결된 모든 간선을 제거했다고 가정해 보자. 이 경우 00번 노드에서 44번 노드로 가는 경로는 존재하지 않으므로 c(3,4)=0c(3,4)=0이다. 반면, 여전히 00번 노드에서 11번 노드로 가는 경로는 존재하므로 c(3,1)=1c(3,1)=1이다. 같은 원리로 다른 노드에 대한 값들도 구할 수 있고, 최종적으로 f(3)=00011_2f(3)={00011}\_{2}이다.

이제 다음의 값을 구해보자.

f(1)⊕f(2)⊕⋯⊕f(N−2)⊕f(N−1)f(1) \oplus f(2) \oplus \cdots \oplus f(N-2) \oplus f(N-1)

⊕\oplus는 bitwise XOR 연산자이다. 자세한 설명은 여기를 참고하라.

입력

첫 번째 줄에 노드의 개수 NN이 주어진다. (3≤N≤200,000)(3 \leq N \leq 200\\,000)

두 번째 줄부터 N−1N-1개의 줄에 걸쳐 트리의 각 간선이 잇는 두 노드의 번호 u, vu,\ v가 공백으로 구분되어 주어진다. (0≤u,v≤N−1;u≠v)(0\leq u,v\leq N-1;u\neq v)

출력

f(1)⊕f(2)⊕⋯⊕f(N−2)⊕f(N−1)f(1) \oplus f(2) \oplus \cdots \oplus f(N-2) \oplus f(N-1)의 값을 N−1N-1자리 이진수로 출력한다.

가장 오른쪽 비트는 c(1,1)⊕c(2,1)⊕⋯⊕c(N−1,1)c(1, 1) \oplus c(2, 1) \oplus \dots \oplus c(N-1, 1)이다. 출력 순서에 유의하라.

예제2

  1. 예제 1

    입력
    6
    0 1
    1 2
    0 3
    3 4
    3 5
    
    예상 출력
    11010
    
  2. 예제 2

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