Nối liền các thành phố

Xem dạng PDF

Gửi bài giải

Điểm: 6,00 (OI)
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 256M
Input: stdin
Output: stdout

Dạng bài
Ngôn ngữ cho phép
C, C++, Java, Kotlin, Pascal, PyPy, Python, Scratch

Một đất nước có ~n~ thành phố và ~m~ con đường hai chiều. Các thành phố được đánh số từ ~1~ đến ~n~. Mỗi con đường nối hai thành phố khác nhau; giữa một cặp thành phố có nhiều nhất một con đường.

Chính quyền muốn xây thêm ít đường nhất sao cho từ bất kỳ thành phố nào cũng có thể đi đến mọi thành phố khác. Hãy in số đường tối thiểu và một phương án xây dựng hợp lệ.

Input
  • Dòng đầu gồm hai số nguyên ~n~ và ~m~, lần lượt là số thành phố và số đường hiện có.
  • Mỗi trong ~m~ dòng tiếp theo gồm hai số nguyên ~a~ và ~b~, cho biết có một con đường hai chiều nối thành phố ~a~ với thành phố ~b~.
Output
  • Dòng đầu in số nguyên ~k~, là số đường mới ít nhất cần xây.
  • Mỗi trong ~k~ dòng tiếp theo in hai số nguyên là hai đầu mút của một đường mới. Có thể in bất kỳ phương án tối ưu hợp lệ nào.
Giới hạn
  • ~1 ≤ n ≤ 10^5~.
  • ~1 ≤ m ≤ 2 × 10^5~.
  • ~1 ≤ a, b ≤ n~ và ~a ≠ b~.
  • Không có hai đường hiện tại nối cùng một cặp thành phố.
Ví dụ

Input

4 2
1 2
3 4

Output

1
2 3
Giải thích ví dụ

Ban đầu có hai vùng liên thông là {1,2}{3,4}. Xây đường 2 3 nối hai vùng này thành một mạng duy nhất. Một đường là đủ và cũng là ít nhất.


Bình luận

Hãy đọc nội quy trước khi bình luận.


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