trang chủ / bài tập / mindiamf

Rừng đường kính nhỏ nhất

Đề bài

Mô tả

Cho một rừng — đồ thị vô hướng n đỉnh trong đó mỗi thành phần liên thông là một cây.

Đường kính của một cây liên thông là số cạnh lớn nhất trên đường đi ngắn nhất giữa hai đỉnh bất kỳ của nó.

Bạn cần thêm một số cạnh (có thể bằng 0) vào rừng sao cho đồ thị thu được là một cây duy nhất và đường kính của cây này nhỏ nhất có thể.

Nếu có nhiều cách thêm cạnh cho cùng kết quả tối ưu, in ra bất kỳ cách nào.

Dữ liệu vào

  • Dòng đầu chứa hai số nguyên nm — số đỉnh và số cạnh của rừng.
  • m dòng tiếp theo, mỗi dòng chứa hai số nguyên vu (1v,un, vu) mô tả một cạnh.

Dữ liệu đảm bảo đồ thị đã cho là một rừng.

Dữ liệu ra

  • Dòng đầu in ra đường kính của cây thu được.
  • (n1)m dòng tiếp theo, mỗi dòng chứa hai số nguyên vu mô tả một cạnh được thêm vào (1v,un, vu).

Đồ thị thu được phải là một cây và có đường kính nhỏ nhất có thể. Khi m=n1 (rừng đã là một cây), không cần thêm cạnh nào — chỉ in ra đường kính.

Ràng buộc

  • 1n1000
  • 0mn1

Ví dụ

Input Output Giải thích
4 2
1 2
2 3
2
2 4
Hai thành phần {1,2,3}{4}. Thêm cạnh (2,4) cho cây có đường kính 2. Thêm (1,4) hay (3,4) sẽ cho đường kính 3.
2 0 1
2 1
Cạnh duy nhất khả thi là (1,2).
3 2
1 3
2 3
2 Rừng đã là cây, đường kính 2, không cần thêm cạnh.

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