아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

공원

시간 제한3초메모리 제한512 MB

요약
가중치가 있는 트리에서 정확히 k개의 정점을 공원으로 골라 모든 정점에서 가장 가까운 공원까지의 거리 중 최댓값을 최소로 만들고, 그 값과 한 가지 최적 선택을 출력한다.
난이도

어려움10점 중 9점

유형
이분 탐색, 그리디, 트리, DFS
정답자
아직 제출이 없습니다

문제

마을 회관은 경관을 꾸미기 위해 새 공원을 짓기로 했다. 공원이 보기 좋을 뿐 아니라 쓸모 있으려면, 다른 동네의 아이들이 적어도 하나의 공원을 가까이에서 이용할 수 있도록 공원을 어느 동네에 지을지 신중히 골라야 한다.

마을은 nn개의 동네와 길이 일정한 n−1n - 1개의 도로로 이루어져 있다. 각 동네에서 다른 동네로 가는 경로는 유일하다. 즉, 동네와 도로는 트리를 이룬다. 서로 다른 동네에 정확히 kk개의 공원을 지어, 나머지 동네가 가장 가까운 공원을 최대한 가까이 두도록 해야 한다. 더 정확히 말하면, 회관은 동네에서 가장 가까운 공원까지의 거리 중 최댓값을 최소화하려 한다.

마을 회관을 도와 어느 동네에 공원을 지어야 하는지 정하고, 동네에서 가장 가까운 공원까지의 거리 중 최댓값을 구하라.

입력

첫째 줄에 두 양의 정수 nn과 kk가 주어진다(1≤k≤n≤200 0001 ≤ k ≤ n ≤ 200\,000). 각각 동네의 수와 공원의 수이다.

다음 n−1n - 1개 줄의 ii번째 줄에는 양의 정수 a_ia\_i, b_ib\_i, w_iw\_i가 주어진다(1≤a_i,b_i≤n1 ≤ a\_i , b\_i ≤ n, 1≤w_i≤1091 ≤ w\_i ≤ 10^9). 이는 a_ia\_i번 동네와 b_ib\_i번 동네가 길이 w_iw\_i인 도로로 연결되어 있음을 뜻한다.

출력

첫째 줄에 문제에서 정의한 최댓값의 최솟값을 출력한다.

둘째 줄에 공원을 지을 동네의 번호 kk개를 공백으로 구분해 출력한다. 답이 여러 개라면 아무거나 출력한다.

힌트

세 번째 예제에 대한 설명: 공원을 3번과 4번 동네에만 지어도 최댓값은 달라지지 않지만, 시는 정확히 kk개의 공원을 지으려 하므로 두 개를 더 지어야 한다.

예제3

  1. 예제 1

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

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

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