순찰

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

요약
마을 1에서 출발해 모든 도로를 순찰하는 최단 폐회로의 길이가 최소가 되도록, 트리에 길이 1인 지름길 K개(1 또는 2)를 놓을 위치를 정하고 그 최소 총 거리를 구한다.
난이도

어려움10점 중 8점

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

문제

11번부터 NN번까지 번호가 붙은 NN개의 마을이 있고, 이 마을들을 모두 연결하는 N−1N-1개의 도로가 있다. 각 도로는 정확히 두 마을을 연결하며, 임의의 마을에서 이 도로들만 이용하여 다른 모든 마을로 갈 수 있다(즉, 도로들은 트리를 이룬다). 각 도로의 길이는 11이다.

모든 마을 사람들의 안전을 위해 순찰대는 매일 모든 도로를 지나가야 한다. 경찰서는 마을 11에 있으므로, 순찰대는 매일 마을 11에서 출발하여 마지막에 다시 마을 11로 돌아와야 한다. 하루의 임무를 마치려면 순찰대는 각 도로를 정확히 두 번씩 지나가야 하며, 따라서 트리에서의 전체 거리는 2(N−1)2(N-1)이다. 예를 들어 어떤 88개 마을의 트리에서 이 거리는 1414이다.

순찰대가 지나가야 하는 전체 거리를 줄이기 위해, 마을들 사이에 KK개의 지름길을 새로 건설한다. 각 지름길은 두 마을을 잇는 길이 11의 새 도로이다. 두 지름길이 같은 마을에서 시작할 수도 있고, 지름길이 루프일 수도 있다(즉, 한 마을을 자기 자신과 연결할 수 있다). 예산이 제한되어 있으므로 KK는 11 또는 22이다. 또한 돈이 낭비되지 않도록, 순찰대는 하루에 각 지름길을 정확히 한 번씩 지나가야 한다.

위의 88개 마을 트리에서, 지름길 하나를 잘 놓으면 순찰대의 전체 거리는 1111로 줄어들고, 지름길 두 개를 놓으면 1010까지 줄일 수 있다. 그러나 지름길 두 개를 잘못 놓으면, 순찰대가 각 지름길을 정확히 한 번씩 지나가야 한다는 조건 때문에 전체 거리가 오히려 1414보다 커질 수도 있다(예: 1515).

도로 정보와 건설할 지름길의 수 KK가 주어질 때, 순찰대가 매일 지나가야 하는 전체 거리가 최소가 되도록 지름길을 어디에 놓을지 결정하여 그 최솟값을 출력하는 프로그램을 작성하라.

입력

첫째 줄에 두 정수 NN(3≤N≤1000003 \le N \le 100000)과 KK(1≤K≤21 \le K \le 2)가 주어진다.

이어지는 N−1N-1개의 줄에는 각각 두 정수 AA와 BB(1≤A,B≤N1 \le A, B \le N)가 주어지며, 이는 마을 AA와 마을 BB를 잇는 도로가 있음을 뜻한다.

출력

지름길 KK개를 최적으로 건설했을 때 순찰대가 매일 지나가야 하는 전체 거리의 최솟값을 정수 하나로 한 줄에 출력한다.

예제1

  1. 예제 1

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