만드는 중입니다

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

트리 위의 안테나

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

요약
모든 정점을 서로 구별하도록 거리 벡터를 만드는 최소 개수의 안테나 정점 집합을 트리에서 찾는다.
난이도

어려움10점 중 8점

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

문제

정점이 NN개인 트리가 있다. 정점은 00부터 N−1N - 1까지 번호가 붙어 있고, ii번째 간선(0≤i<N−10 \le i < N - 1)은 정점 a_ia\_i와 b_ib\_i를 연결한다. 각 정점 쌍 u,vu, v (0≤u,v<N0 \le u, v < N)에 대해 거리 d(u,v)d(u, v)를 경로 uu-vv 위의 간선 수로 정의한다.

외계인 침공으로 정점 하나가 점령될 예정이다. Snuke는 침공이 일어난 즉시 그 정점을 알아내려 한다. 이를 위해 일부 정점에 안테나를 설치하기로 했다.

먼저 안테나의 개수 KK (1≤K≤N1 \le K \le N)를 정한다. 그다음 서로 다른 KK개의 정점 x_0,x˜_1,…˜,x˜_K−1x\_0,\~x\_1,\~\ldots,\~x\_{K - 1}을 골라 각각 안테나 0,1,…,K−10, 1, \ldots, K - 1을 설치한다. 정점 vv가 외계인에게 점령되면 안테나 kk (0≤k<K0 \le k < K)는 거리 d(x_k,v)d(x\_k, v)를 출력한다. Snuke는 이 KK개의 출력을 보고 점령된 정점을 알아낸다. 따라서 어느 정점이 점령되더라도 그 정점을 알아내려면 다음 조건이 성립해야 한다: 각 정점 uu (0≤u<N0 \le u < N)에 대해 벡터 (d(x_0,u),…,d(x_K−1,u))(d(x\_0, u), \ldots, d(x\_{K - 1}, u))를 생각하자. 이 NN개의 벡터는 모두 서로 달라야 한다.

조건이 성립할 때 안테나 개수 KK의 최솟값을 구하라.

입력

입력은 다음 형식으로 주어진다:

NN

a_0a\_0 b_0b\_0

a_1a\_1 b_1b\_1

…\ldots

a_N−2a\_{N - 2} b_N−2b\_{N - 2}

출력

조건이 성립할 때 안테나 개수 KK의 최솟값을 출력한다.

제한

2≤N≤1052 \le N \le 10^5, 0≤a_i,b_i<N0 \le a\_i, b\_i < N, 주어진 그래프는 트리이다.

힌트

Sample 1에서는 정점 11과 33에 안테나를 설치한다. 그러면 다음 다섯 벡터가 서로 다르다:

  • (d(1,0),d(3,0))=(1,1)(d(1, 0), d(3, 0)) = (1, 1)
  • (d(1,1),d(3,1))=(0,2)(d(1, 1), d(3, 1)) = (0, 2)
  • (d(1,2),d(3,2))=(2,2)(d(1, 2), d(3, 2)) = (2, 2)
  • (d(1,3),d(3,3))=(2,0)(d(1, 3), d(3, 3)) = (2, 0)
  • (d(1,4),d(3,4))=(3,1)(d(1, 4), d(3, 4)) = (3, 1)

Sample 2에서 가능한 해 중 하나는 정점 00에 안테나를 설치하는 것이다.

Sample 3에서 가능한 해 중 하나는 정점 00, 44, 99에 안테나를 설치하는 것이다.

예제3

  1. 예제 1

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

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

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