만드는 중입니다

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

환승역 찾기 게임

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

요약
트리의 각 정점에 색이 칠해져 있을 때, 모든 색에 대해 같은 색 두 정점 사이의 최단 경로에 놓이는 정점의 개수를 구합니다.
난이도

보통10점 중 6점

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

문제

Semia와 Hanbyeol은 환승역 찾기 게임을 하려고 한다.

환승역 찾기 게임은 트리로 이루어진 게임판에서 두 사람이 번갈아 가며 환승역을 찾는 게임이다. 트리의 모든 정점은 11부터 KK까지의 색깔 중 하나로 칠해져 있다.

정점 pp가 노선 ii 위에 있다는 것은, 색이 ii인 서로 다른 두 정점 aa, bb가 존재하여 둘을 잇는 유일한 최단 경로 위에 pp가 있다는 뜻이다. aa, bb 중 하나가 pp인 경우도 포함한다.

또, 정점 pp가 노선 1,2,⋯ ,K1, 2, \cdots, K 모두의 위에 있으면 pp를 환승역이라고 한다.

환승역 찾기 게임에서는 모든 환승역을 찾고 더 이상 환승역이 없다고 선언하면 높은 점수를 받는다. 그래서 두 사람은 게임판에 있는 환승역의 개수를 알고 싶어졌다. 두 사람을 도와 환승역의 개수를 구하자.

입력

첫째 줄에 트리의 정점 개수 NN과 색깔의 종류 KK가 주어진다.

둘째 줄에는 각 정점에 칠해진 색깔 AiA_i가 공백으로 구분되어 주어진다.

다음 N−1N-1개의 줄에는 트리에서 연결된 두 정점의 번호가 공백으로 구분되어 주어진다.

출력

첫째 줄에 환승역의 개수를 출력한다.

제한

  • 2≤N≤100,0002 \leq N \leq 100,000
  • 1≤K≤50,0001 \leq K \leq 50,000
  • 1≤Ai≤K1 \leq A_i \leq K

예제2

  1. 예제 1

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

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