트리 다듬기
시간 제한1초메모리 제한1024 MB
트리에서 간선을 끊고 한쪽 트리의 정점을 다른 쪽 정점에 다시 이어 붙이는 연산을 최대 K번 할 때, 얻을 수 있는 지름의 최댓값을 구합니다.
문제
개의 정점과 개의 간선으로 구성된 트리가 주어진다. 트리의 각 정점에는 부터 까지의 번호가 중복 없이 매겨져 있다. 트리에 속한 모든 간선의 길이는 1이다.
트리를 구성하는 서로 다른 두 정점 간의 거리 중 최댓값을 트리의 지름이라고 한다.
동건이는 트리에 아래와 같은 작업을 할 수 있다. 한 번의 작업은 아래의 세 단계를 순서대로 수행하는 것을 의미한다.
- 트리에서 이웃한 두 정점 와 를 선택하여 와 를 잇는 간선을 삭제한다. 간선 삭제 후, 가 포함된 트리를 , 가 포함된 트리를 라 하자.
- 트리 에서 정점 를 선택한다.
- 와 를 잇는 간선을 추가하여 두 트리를 다시 하나의 트리로 합친다.
동건이가 작업을 최대 번 할 수 있을 때, 동건이가 얻을 수 있는 트리 중에서 지름이 가장 긴 것의 지름을 구해보자.
입력
첫째 줄에 트리의 정점 개수를 나타내는 정수 과 최대 작업 횟수를 나타내는 정수 가 공백으로 구분되어 주어진다. (, )
둘째 줄부터 개의 줄에 걸쳐 트리를 이루는 간선의 정보를 나타내는 두 정수 , 가 공백으로 구분되어 주어진다. 이는 번 정점과 번 정점을 잇는 간선이 존재한다는 의미이다. (, )
트리를 이루는 모든 간선은 정확히 한 번씩 주어진다.
출력
첫째 줄에 동건이가 얻을 수 있는 트리 중 지름이 가장 긴 트리의 지름을 출력한다.
힌트
아래와 같은 트리에 작업을 1회 진행해보자.

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

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