Liên bang hóa Berland

Đề bài

Mô tả

Cho một cây gồm n đỉnh, các đỉnh được đánh số từ 1 đến n. Cây có n1 cạnh được đánh số từ 1 đến n1 theo thứ tự xuất hiện trong dữ liệu vào.

Bạn cần chia tập đỉnh thành một số nhóm sao cho:

  • Mỗi nhóm là một thành phần liên thông trong cây (tức là sau khi bỏ một số cạnh, các đỉnh thuộc cùng một nhóm vẫn liên thông với nhau qua các cạnh còn lại).
  • Tồn tại đúng một nhóm có chính xác k đỉnh.
  • Số cạnh bị bỏ là nhỏ nhất có thể.

Hãy in ra số cạnh bị bỏ tối thiểu và một danh sách chỉ số các cạnh bị bỏ thoả mãn yêu cầu trên. Nếu có nhiều cách bỏ cạnh khác nhau cùng đạt số lượng tối thiểu, in ra một cách bất kỳ.

Dữ liệu vào

  • Dòng đầu tiên chứa hai số nguyên nk (1kn400).
  • n1 dòng tiếp theo, mỗi dòng chứa hai số nguyên xi,yi (1xi,yin; xiyi) — mô tả cạnh thứ i nối hai đỉnh xiyi.

Dữ liệu đảm bảo các cạnh tạo thành một cây.

Dữ liệu ra

  • Dòng đầu in ra số nguyên t — số cạnh tối thiểu cần bỏ.
  • Dòng thứ hai in ra t số nguyên — chỉ số các cạnh bị bỏ (theo thứ tự xuất hiện trong dữ liệu vào).

Nếu t=0, bạn có thể để trống dòng thứ hai hoặc bỏ luôn dòng thứ hai.

Ví dụ

Input Output Giải thích
5 2
1 2
2 3
3 4
4 5
1
2
Bỏ cạnh số 2 (nối 23). Nhóm {1,2} có đúng 2 đỉnh.
5 3
1 2
1 3
1 4
1 5
2
3 4
Bỏ cạnh 3 (nối 14) và cạnh 4 (nối 15). Nhóm {1,2,3} có đúng 3 đỉnh; các đỉnh 4,5 tách thành hai nhóm đơn lẻ.
1 1 0 Cây chỉ có một đỉnh, đã thoả mãn ngay từ đầu, không cần bỏ cạnh nào.

Bình luận

Không có bình luận tại thời điểm này.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.46 awk 1.3.4 gcc 16.1.0 csc 6.12.0.200 g++ 16.1.0 g++-themis 16.1.0 g++17 16.1.0 g++20 16.1.0 g++23 16.1.0 clang++ 22.1.6 dmd 2.112.0 dart 3.12.1 gforth 0.7.3 gfortran 12.2.0 go 1.26.3 groovyc 5.0.6 javac 25.0.3 node 26.2.0 kotlinc 2.3.21 sbcl 2.2.9 lua 5.4.8 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.6 pike 8.0 pypy3 7.3.23 python3 3.14.5 racket 8.7 ruby 4.0.5 rustc 1.96.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 tclsh 8.6 bun 1.3.14 deno 2.8.1 v 0.5.1 zig 0.16.0