트리 펴기

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

요약
트리가 주어질 때, 간선 하나를 자르고 한쪽 트리의 정점을 다른 쪽에 다시 이어 붙이는 작업을 최소 몇 번 해야 모든 정점의 차수가 2 이하인 경로 형태로 만들 수 있는지 구한다.
난이도

어려움10점 중 8점

유형
트리, DFS, 동적 계획법, 그리디
정답자
아직 제출이 없습니다

문제

NN개의 정점과 N−1N-1개의 간선으로 구성된 트리가 주어진다. 트리의 각 정점에는 11부터 NN까지의 번호가 중복 없이 매겨져 있다.

동건이는 트리에 아래와 같은 작업을 할 수 있다. 한 번의 작업은 아래의 두 단계를 순서대로 수행하는 것을 의미한다.

  1. 트리에서 이웃한 두 정점 ss와 tt를 선택하여 ss와 tt를 잇는 간선을 삭제한다. 간선 삭제 후, ss가 포함된 트리를 SS, tt가 포함된 트리를 TT라 하자.
  2. 트리 TT에서 정점 pp를 선택하고, pp와 ss를 잇는 간선을 추가한다.

위의 작업은 항상 트리 상태를 유지한다. 동건이가 주어진 트리를 일자-트리†^\dagger로 만드는 데 필요한 최소 작업 횟수를 구해보자.


†^\dagger 일자-트리란 모든 정점의 차수가 22 이하인 트리이다.

입력

첫째 줄에 트리의 정점 개수를 나타내는 정수 NN이 주어진다. (2≤N≤500,0002 \le N \le 500\\,000)

둘째 줄부터 N−1N-1개의 줄에 걸쳐 트리를 이루는 간선의 정보를 나타내는 두 정수 uu, vv가 공백으로 구분되어 주어진다. 이는 uu번 정점과 vv번 정점을 잇는 간선이 존재한다는 의미이다. (1≤u,v≤N1 \le u, v \le N, u≠vu \ne v)

입력으로 주어지는 그래프는 항상 트리임이 보장된다.

출력

첫째 줄에 동건이가 주어진 트리를 일자-트리로 만드는 데 필요한 최소 작업 횟수를 출력한다.

예제3

  1. 예제 1

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

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

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