트리 오델로

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

요약
루트로부터의 거리가 정해진 값 이하인 정점을 통째로 뒤집는 연산을 N번 이하로 써서 검은 정점을 정확히 M개로 만들 수 있는지 판정하고, 가능하면 연산 목록을 출력한다.
난이도

보통10점 중 7점

유형
트리, 그리디, 정렬, 수학
정답자
아직 제출이 없습니다

문제

정점의 개수가 NN개인 트리가 주어진다. 트리는 11번 정점을 루트로 하며, 간선의 개수는 N−1N−1개이다.

트리의 각 간선에는 양의 가중치가 있으며, 두 정점 uu, vv 사이의 거리는 uu에서 vv로 가는 단순 경로 위의 모든 간선 가중치 합으로 정의한다.

트리의 각 정점은 흰색이나 검은색 중 하나의 색을 가지며, 처음에는 트리의 모든 정점이 흰색이다. 이 트리에 대해 다음과 같은 연산을 사용할 수 있다.

  • 0≤k≤1090 \le k \le 10^9인 정수 kk를 하나 선택한다.
  • 트리의 루트로부터 거리가 kk 이하인 모든 정점의 색을 흑백 반전한다. 즉, 정점이 흰색이라면 검은색으로, 검은색이라면 흰색으로 바꾼다.

이 연산을 최대 NN번 사용하여, 트리에서 검은색인 정점의 개수를 정확히 MM개로 만들 수 있는지 구해보자. 연산 횟수는 최소일 필요가 없지만, 반드시 NN번 이하이어야 한다.

입력

첫 번째 줄에 정수 NN, MM이 공백으로 구분되어 주어진다.

다음 N−1N-1개의 줄에는 간선의 정보가 주어진다. 그중 ii번째 줄에는 정수 u_i,v_i,x_iu\_i,v\_i, x\_i가 공백으로 구분되어 주어진다. 이는 u_iu\_i번 정점과 v_iv\_i번 정점을 잇는 간선의 가중치가 x_ix\_i임을 의미한다. (1≤i≤N−1)(1 \le i \le N - 1)

출력

만약 검은색인 정점의 개수가 정확히 MM개가 될 수 있다면

  • 첫 번째 줄에 연산의 횟수 CC를 출력한다.
  • 두 번째 줄에 각 연산에 사용될 음이 아닌 정수 k_1,k_2,⋯ ,k_Ck\_1, k\_2, \cdots, k\_C를 공백으로 구분하여 출력한다. 이는 jj번째 연산에서 선택한 정수가 k_jk\_j임을 의미한다. (1≤j≤C)(1 \le j \le C)

만약 검은색인 정점의 개수가 정확히 MM개가 될 수 없다면 첫 번째 줄에 -1을 출력한다.

제한

  • 1≤M≤N≤5,0001 \le M \le N \le 5\\,000
  • 1≤u_i,v_i≤N1 \le u\_i, v\_i \le N
  • 1≤x_i≤5,0001 \le x\_i \le 5\\,000
  • u≠vu \ne v
  • 1≤C≤N1 \le C \le N
  • 0≤k_j≤1090 \le k\_j \le 10^9

예제2

  1. 예제 1

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

    입력
    5 2
    1 2 10
    1 3 10
    1 4 10
    1 5 10
    
    예상 출력
    -1