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

Thứ tự tô-pô nhỏ nhất theo thứ tự từ điển

Khi một số công việc phụ thuộc lẫn nhau (làm xong việc u mới được làm việc v), ta cần

C++Cơ bản15 phút

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

Điểm và code bạn nộp đượ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ủ đề

graphtopological-sortpriority-queueentry-ramp

Kiến thức tiên quyết: cpp-basics, arrays.

Nội dung đề bài

Mô tả bài toán

Khi một số công việc phụ thuộc lẫn nhau (làm xong việc u mới được làm việc v), ta cần xếp chúng thành một dãy mà mọi phụ thuộc đều được tôn trọng. Một dãy như vậy gọi là thứ tự tô-pô. Thường có nhiều dãy hợp lệ và người ta muốn dãy "đẹp" nhất theo thứ tự từ điển.

Yêu cầu

Cho đồ thị có hướng không chu trình (DAG) gồm n đỉnh đánh số 1..n và m cung. Cung u -> v nghĩa là u phải đứng trước v. Hãy in ra thứ tự tô-pô nhỏ nhất theo thứ tự từ điển: trong tất cả các dãy hợp lệ, chọn dãy sao cho phần tử đầu tiên nhỏ nhất có thể; nếu vẫn còn nhiều dãy, so tiếp phần tử thứ hai, rồi thứ ba, và cứ như vậy. Nói cách khác: ở mỗi bước, luôn chọn đỉnh nhỏ nhất trong số các đỉnh đã sẵn sàng (mọi đỉnh phải đứng trước nó đều đã được xếp).

Quy ước nộp bài

Nộp tệp solution.cpp đọc dữ liệu từ stdin và in kết quả ra stdout. Đúng n số trên một dòng, cách nhau một dấu cách, không in thêm chữ nào. Chỉ dùng thư viện chuẩn C++17.

Input

  • Dòng đầu tiên: hai số nguyên n, m (1 <= n <= 8, 0 <= m <= 12).
  • m dòng tiếp theo: mỗi dòng hai số nguyên u, v (1 <= u, v <= n, u != v) nghĩa là

có cung u -> v. Mỗi cặp có nhiều nhất một cung và đồ thị đảm bảo không có chu trình.

  • Nếu m = 0 thì không có dòng cung nào.

Output

In ra stdout một dòng gồm đúng n số nguyên là thứ tự tô-pô nhỏ nhất theo thứ tự từ điển, phân tách bằng một dấu cách.

Ràng buộc

  • Đồ thị đảm bảo không có chu trình nên luôn tồn tại thứ tự tô-pô.
  • Kết quả phải là dãy nhỏ nhất theo thứ tự từ điển, không phải một dãy hợp lệ bất kỳ.
  • Mỗi bộ dữ liệu có thời gian chạy 1 giây.

Ví dụ 1

Input

4 3
1 2
1 3
3 4

Output

1 2 3 4

Ví dụ 2

Input

3 0

Output

1 2 3

Giải thích

Dữ liệu vào:

Các dãy hợp lệ có 1 đứng đầu vì chỉ đỉnh 1 không có cung nào đi vào. Sau 1, cả 2 và 3 đều sẵn sàng nhưng 2 < 3 nên chọn 2; tiếp theo chỉ 3 sẵn sàng, cuối cùng là 4. Kết quả là:

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.

Nhóm Zalo