cpp-018Đọc toàn bộ đề miễn phí

Đếm số thành phần liên thông và tìm cụm máy chủ lớn nhất bằng DFS

Hạ tầng tính toán đám mây của AI Empire Academy có N máy chủ được đánh số từ 1 đến N và M kết nối mạng nội bộ hai chiều (1 ≤ N ≤ 105, 0 ≤ M ≤ 2 · 105).

C++Nâng cao35 phút

Tiến độ của tôi ở bài này

Điểm được lưu vào tài khoản sau khi chấm bài.

Đang tải điểm của bạn…

Kiến thức và chủ đề

graphsdfsconnected componentsrecursion

Kiến thức tiên quyết: recursion, std vector, graph representation.

Nội dung đề bài

Mục tiêu kiến thức

  • Áp dụng thuật toán Duyệt theo chiều sâu (Depth-First Search - DFS) trên đồ thị vô hướng.
  • Nhận diện và đếm số lượng thành phần liên thông (Connected Components) trong đồ thị rời rạc.
  • Thu thập danh sách các đỉnh thuộc từng thành phần liên thông để tìm thành phần có kích thước lớn nhất.
  • Đạt độ phức tạp thời gian tuyến tính O(V + E).

Mô tả bài toán

Hạ tầng tính toán đám mây của AI Empire Academy có N máy chủ được đánh số từ 1 đến N và M kết nối mạng nội bộ hai chiều (1 ≤ N ≤ 105, 0 ≤ M ≤ 2 · 105).

Do sự cố phân vùng mạng, các máy chủ có thể bị chia cắt thành nhiều cụm độc lập (mỗi cụm là một thành phần liên thông, trong đó các máy chủ trong cùng cụm có thể truyền tin được cho nhau, nhưng không thể kết nối tới máy chủ thuộc cụm khác).

Bạn hãy viết chương trình:

  • Đếm tổng số lượng cụm máy chủ độc lập (bao gồm cả các máy chủ đứng cô lập một mình).
  • Xác định kích thước của cụm máy chủ có số lượng máy chủ đông nhất.
  • In ra danh sách các máy chủ thuộc cụm lớn nhất này theo thứ tự tăng dần. Nếu có nhiều cụm có cùng kích thước lớn nhất, hãy chọn cụm chứa đỉnh có số hiệu nhỏ nhất.

Quy ước nộp bài

  • Chỉ cần viết một chương trình đọc stdin và in ra stdout. Bài này không yêu cầu viết hàm.
  • Không dùng cout để in lời nhắc trước khi đọc dữ liệu. Lời nhắc sẽ lọt vào stdout và làm bài sai.
  • Chỉ in đúng nội dung ở mục Output. Không in thêm nhãn, dòng trống hay ký tự thừa.
  • Output được so khớp từng ký tự, phân biệt chữ hoa/thường và dấu câu.

Input

  • Dòng 1: Gồm 2 số nguyên N và M (1 ≤ N ≤ 105, 0 ≤ M ≤ 2 · 105).
  • M dòng tiếp theo: Mỗi dòng gồm 2 số nguyên u, v (1 ≤ u, v ≤ N, u ≠ v) đại diện cho một kết nối hai chiều giữa máy chủ u và v.

Output

  • Dòng 1: In 2 số nguyên cách nhau bởi dấu cách: So_cum Kich_thuoc_lon_nhat
  • Dòng 2: In danh sách các máy chủ thuộc cụm lớn nhất được chọn, sắp xếp theo thứ tự tăng dần, cách nhau bởi một dấu cách.

Ràng buộc

  • 1 ≤ N ≤ 105.
  • 0 ≤ M ≤ 2 · 105.
  • Thời gian chạy: 1000ms.
  • Bộ nhớ tối đa: 256MB.

Ví dụ 1

Input

7 4
1 2
2 3
4 5
6 7

Output

3 3
1 2 3

Giải thích

Đồ thị có 3 cụm liên thông:

  • Cụm 1: {1, 2, 3} (kích thước 3).
  • Cụm 2: {4, 5} (kích thước 2).
  • Cụm 3: {6, 7} (kích thước 2).

Tổng số cụm là 3. Cụm lớn nhất có kích thước 3 gồm các đỉnh 1 2 3.

3 cấp độ gợi ýMở dần khi bạn thật sự cần hỗ trợ.
Phân tích lời giảiGiải thích hướng tư duy và thuật toán.
Code tham khảoDùng để đối chiếu sau khi tự làm.

Gợi ý và lời giải chỉ mở sau khi bạn bấm Nộp bài. Giáo viên và quản trị viên mở được ngay.