순찰
시간 제한1초메모리 제한64 MB
마을 1에서 출발해 모든 도로를 순찰하는 최단 폐회로의 길이가 최소가 되도록, 트리에 길이 1인 지름길 K개(1 또는 2)를 놓을 위치를 정하고 그 최소 총 거리를 구한다.
문제
번부터 번까지 번호가 붙은 개의 마을이 있고, 이 마을들을 모두 연결하는 개의 도로가 있다. 각 도로는 정확히 두 마을을 연결하며, 임의의 마을에서 이 도로들만 이용하여 다른 모든 마을로 갈 수 있다(즉, 도로들은 트리를 이룬다). 각 도로의 길이는 이다.
모든 마을 사람들의 안전을 위해 순찰대는 매일 모든 도로를 지나가야 한다. 경찰서는 마을 에 있으므로, 순찰대는 매일 마을 에서 출발하여 마지막에 다시 마을 로 돌아와야 한다. 하루의 임무를 마치려면 순찰대는 각 도로를 정확히 두 번씩 지나가야 하며, 따라서 트리에서의 전체 거리는 이다. 예를 들어 어떤 개 마을의 트리에서 이 거리는 이다.
순찰대가 지나가야 하는 전체 거리를 줄이기 위해, 마을들 사이에 개의 지름길을 새로 건설한다. 각 지름길은 두 마을을 잇는 길이 의 새 도로이다. 두 지름길이 같은 마을에서 시작할 수도 있고, 지름길이 루프일 수도 있다(즉, 한 마을을 자기 자신과 연결할 수 있다). 예산이 제한되어 있으므로 는 또는 이다. 또한 돈이 낭비되지 않도록, 순찰대는 하루에 각 지름길을 정확히 한 번씩 지나가야 한다.
위의 개 마을 트리에서, 지름길 하나를 잘 놓으면 순찰대의 전체 거리는 로 줄어들고, 지름길 두 개를 놓으면 까지 줄일 수 있다. 그러나 지름길 두 개를 잘못 놓으면, 순찰대가 각 지름길을 정확히 한 번씩 지나가야 한다는 조건 때문에 전체 거리가 오히려 보다 커질 수도 있다(예: ).
도로 정보와 건설할 지름길의 수 가 주어질 때, 순찰대가 매일 지나가야 하는 전체 거리가 최소가 되도록 지름길을 어디에 놓을지 결정하여 그 최솟값을 출력하는 프로그램을 작성하라.
입력
첫째 줄에 두 정수 ()과 ()가 주어진다.
이어지는 개의 줄에는 각각 두 정수 와 ()가 주어지며, 이는 마을 와 마을 를 잇는 도로가 있음을 뜻한다.
출력
지름길 개를 최적으로 건설했을 때 순찰대가 매일 지나가야 하는 전체 거리의 최솟값을 정수 하나로 한 줄에 출력한다.