python-072Đọc toàn bộ đề miễn phí
Tập hợp rời rạc Disjoint Set Union (DSU) và Phát hiện chu trình
Viết lớp DisjointSetUnion:
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ủ đề
Kiến thức tiên quyết: trees, graphs.
Nội dung đề bài
Mục tiêu kiến thức
- Triển khai cấu trúc dữ liệu Disjoint Set Union (Union-Find).
- Áp dụng kỹ thuật Nén đường đi (
Path Compression) và Hợp nhất theo kích thước/hạng (Union by Rank/Size). - Phát hiện chu trình trong đồ thị vô hướng và đếm số thành phần liên thông.
Mô tả bài toán
Viết lớp DisjointSetUnion:
__init__(self, n: int): Khởi tạo N phần tử có nhãn từ 0 đến n - 1. Ban đầu mỗi phần tử là một tập hợp riêng biệt. Nếu n ≤ 0, raiseValueError("n phai la so nguyen duong").find(self, i: int) -> int: Tìm đại diện (gốc) của tập hợp chứa phần tử i, áp dụng kỹ thuật Nén đường đi (parent[i] = find(parent[i])).union(self, i: int, j: int) -> bool:- Hợp nhất hai tập hợp chứa i và j (áp dụng Union by Rank/Size).
- Nếu i và j vốn đã thuộc cùng một tập hợp, trả về
False(báo hiệu cạnh (i, j) tạo thành chu trình!). - Nếu hai phần tử thuộc hai tập hợp khác nhau, tiến hành hợp nhất và trả về
True. is_connected(self, i: int, j: int) -> bool: Kiểm tra i và j có chung tập hợp hay không.connected_components(self) -> int: Trả về số lượng tập hợp rời rạc (thành phần liên thông) hiện tại. Ban đầu là n, giảm đi 1 sau mỗi lầnunionthành công.
Input
- Tham số đầu vào cho hàm
DisjointSetUnion.
Output
- Giá trị trả về của hàm
DisjointSetUniontheo đúng yêu cầu.
Ràng buộc
- Thời gian chạy tối đa: 1000ms.
- Giới hạn bộ nhớ: 256MB.
- Dữ liệu đầu vào tuân thủ đúng kiểu dữ liệu và miền giá trị được mô tả.
Ví dụ 1
Input
DisjointSetUnion()Output
TrueGiải thích
Hàm được gọi với các tham số mẫu trên và trả về kết quả chính xác theo yêu cầu.
Ví dụ 2
Input
DisjointSetUnion()Output
TrueGiải thích
Hàm được gọi với bộ tham số thứ hai và trả về kết quả tương ứng theo thiết kế.
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.
Góp ý & báo lỗi bài tập
Đề bài chưa rõ, test có vấn đề hay bạn có ý tưởng giúp bài tốt hơn? Gửi cho đội ngũ AI Empire nhé — mỗi góp ý đều được đọc.
