트리 높이 줄이기

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

요약
루트가 있는 트리에서 정점을 조상 정점에 재연결하는 연산을 반복해 레벨 차이만큼 비용을 지불하면서 트리 높이를 H 이하로 만드는 최소 비용을 구하는 문제입니다.
난이도

어려움10점 중 8점

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

문제

루트가 있는 트리에서 어떤 정점 V의 레벨은 루트에서 V까지의 거리이다. 정점 U가 정점 V의 부모라는 것은 U와 V가 간선으로 연결되어 있고, U의 레벨이 V의 레벨보다 정확히 1 작다는 뜻이다.

다음 재연결 작업을 원하는 만큼 수행할 수 있다.

  1. 루트가 아닌 정점 V를 고른다.
  2. V의 조상 중 하나인 정점 U를 고른다.
  3. V와 현재 부모를 잇는 간선을 제거한다.
  4. U와 V를 간선으로 연결하여 U가 V의 새 부모가 되게 한다.

작업 비용은 작업 직전 두 정점의 레벨 차이에서 1을 뺀 값이다. 작업 직전 V의 레벨이 L1, U의 레벨이 L2라면 비용은 L1 - L2 - 1이다.

트리의 높이가 K라는 것은 레벨이 K인 정점이 하나 이상 있고, 레벨이 K + 1인 정점은 없다는 뜻이다. 주어진 트리의 높이를 H 이하로 만들기 위해 필요한 재연결 작업 비용의 최솟값을 구하라. 작업은 여러 번 수행할 수 있다.

입력

첫째 줄에 정점의 수 N이 주어진다. (1 <= N <= 100)

둘째 줄부터 N - 1개의 줄에는 트리의 간선 정보가 주어진다. 각 줄은 a b 형태이며, 이는 a가 b의 부모라는 뜻이다.

정점 번호는 0부터 N - 1까지이고, 루트는 항상 0이다.

마지막 줄에는 목표 높이 H가 주어진다. H는 1 이상 N - 1 이하의 정수이다.

출력

트리의 높이를 H 이하로 만들기 위해 필요한 재연결 작업 비용의 최솟값을 첫째 줄에 출력한다.

예제4

  1. 예제 1

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

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

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

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