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

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

트리 색칠하기

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

요약
루트가 있는 트리와 각 정점의 목표 색이 주어질 때, 흰색이 아닌 색으로 부분 트리를 다시 칠하는 연산을 최소 몇 번 해야 목표 색에 도달하는지 구한다.
난이도

보통10점 중 7점

유형
트리, DFS, 그리디, 구현
정답자
아직 제출이 없습니다

문제

정점이 NN개인 트리가 있다. 정점에는 1부터 NN까지 번호가 붙어있다. 트리의 루트는 항상 1번 정점이며, 맨 처음에는 모든 정점이 하얀색으로 칠해져 있다.

한 정점에 색칠하면 그 정점의 서브트리에 속한 모든 정점이 같은 색으로 칠해진다. 색은 섞이지 않으며, 색칠할 때마다 그 색으로 덮어진다. 단, 하얀색으로는 색칠할 수 없다.

아래 그림처럼 정점 10개로 구성된 트리가 있다고 하자.

[그림 1] 하얀색으로 칠해져 있는 트리

3번 정점을 노란색으로 칠하면 그 아래 있는 정점 5, 6, 8, 9, 10이 모두 노란색으로 칠해진다.

[그림 2] 정점 3에 노란색을 칠한 후 트리의 상태

그리고 정점 5에 파란색을 칠한다면 그 아래 있는 정점 8, 9, 10이 모두 파란색으로 칠해진다.

[그림 3] 정점 5에 파란색을 칠한 후 트리의 상태

입력으로 트리의 정보와 정점의 색 정보가 주어진다. 색 정보는 음이 아닌 정수로 주어지며 값이 0인 경우는 항상 하얀색을 의미한다.

하얀색을 제외한 색만 사용해서 모든 정점을 주어진 색으로 칠하고 싶을 때, 최소 몇 번 색을 칠해야 하는지 구해보자.

입력

첫째 줄에 트리를 구성하는 정점의 개수 N(1≤N≤200,000)N(1 ≤ N ≤ 200,000)이 주어진다.

둘째 줄에 1번 정점부터 NN번 정점까지 각 색 정보 Ci(0≤Ci≤N)C_i (0 ≤ C_i ≤ N)가 공백으로 구분되어 주어진다.

셋째 줄부터 N−1N - 1개의 줄에 걸쳐 연결된 두 정점 a,b(1≤a,b≤Na, b(1 ≤ a, b ≤ N, a≠b)a ≠ b)가 공백으로 구분되어 주어진다.

모든 정점을 칠할 수 있는 입력만 주어진다.

출력

하얀색을 제외한 색만 사용해서 모든 정점을 원하는 색으로 칠하기 위해 최소 몇 번 칠하면 되는지 출력한다.

예제2

  1. 예제 1

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

    입력
    10
    0 0 1 0 2 1 0 2 2 2
    3 1
    1 4
    9 5
    10 5
    1 2
    3 6
    3 5
    5 8
    4 7
    
    예상 출력
    2