만드는 중입니다

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

트리 다듬기

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

요약
트리에서 간선을 끊고 한쪽 트리의 정점을 다른 쪽 정점에 다시 이어 붙이는 연산을 최대 K번 할 때, 얻을 수 있는 지름의 최댓값을 구합니다.
난이도

보통10점 중 7점

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

문제

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

트리를 구성하는 서로 다른 두 정점 간의 거리 중 최댓값을 트리의 지름이라고 한다.

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

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

동건이가 작업을 최대 KK번 할 수 있을 때, 동건이가 얻을 수 있는 트리 중에서 지름이 가장 긴 것의 지름을 구해보자.

입력

첫째 줄에 트리의 정점 개수를 나타내는 정수 NN과 최대 작업 횟수를 나타내는 정수 KK가 공백으로 구분되어 주어진다. (2≤N≤100 0002 \le N \le 100\,000, 0≤K≤100 0000 \le K \le 100\,000)

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

트리를 이루는 모든 간선은 정확히 한 번씩 주어진다.

출력

첫째 줄에 동건이가 얻을 수 있는 트리 중 지름이 가장 긴 트리의 지름을 출력한다.

힌트

아래와 같은 트리에 작업을 1회 진행해보자.

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

  1. 트리 SS에서 정점 33을 선택한다.
  2. 33과 44를 잇는 간선을 추가하여 두 트리를 다시 하나의 트리로 합친다.

예제4

  1. 예제 1

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

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

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

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