Mã thẻ công dân
Đề bài
Mô tả
Nhằm đổi mới việc quản lí cư dân, chính phủ đưa ra chủ trương cấp thẻ công dân thay cho giấy chứng minh nhân dân và giao quyền cấp mã thẻ cho các tỉnh thành phố trực thuộc trung ương. Để phục vụ cho công việc tạo mã thẻ, đơn vị cấp mã thẻ địa phương đã thu thập thông tin về mối quan hệ quen biết nhau của cư dân trong địa bàn của mình. Mối quan hệ đó được mô tả bởi đơn đồ thị vô hướng liên thông với đỉnh, mỗi đỉnh tương ứng với một người, hai đỉnh được nối với nhau bởi một cạnh nếu hai người tương ứng là quen biết nhau. (Chú ý là mối quan hệ quen biết ở đây là hai chiều, nghĩa là nếu người quen biết người thì người cũng quen biết người và ngược lại). Tiếp theo, công việc tạo mã thẻ công dân được tiến hành theo hai bước sau:
Bước 1: Số hóa thông tin về quan hệ quen biết của toàn bộ cư dân bằng cách sắp xếp danh sách cư dân theo thứ tự từ điển không giảm của tên người (hai người trùng tên thì thứ tự giữa hai người là tùy ý), và theo danh sách đã sắp xếp, lần lượt đánh số các đỉnh tương ứng của đồ thị bắt đầu từ .
Bước 2: Mỗi đỉnh của đồ thị được gán một nhãn là một bộ có thứ tự gồm chỉ số của một số đỉnh được tạo bởi thuật toán sau đây:
- Khởi tạo nhãn của đỉnh là , các đỉnh còn lại là chưa có nhãn; đỉnh là đã có nhãn nhưng nhãn của nó là chưa cố định.
- Tại mỗi bước trong bước tiếp theo, thực hiện các thao tác sau:
- Tìm là đỉnh có chỉ số nhỏ nhất trong số các đỉnh đã có nhãn chưa cố định;
- Cố định nhãn đỉnh ;
- Với mỗi đỉnh kề với đỉnh (nghĩa là có cạnh nối với ):
- Nếu chưa có nhãn thì khởi tạo nhãn của là ;
- Nếu có nhãn chưa cố định thì thêm đỉnh vào cuối nhãn hiện thời của .
Quan sát các nhãn thu được, Trưởng ban tin học hóa việc quản lý cư dân thấy rằng các nhãn được tạo ra tuy thuận tiện cho quản lý nhưng không tuân theo thứ tự từ điển. Trưởng ban yêu cầu đánh số lại các đỉnh của đồ thị về mối quan hệ quen biết sao cho bộ nhãn của các đỉnh thu được theo thuật toán ở Bước thỏa mãn tính chất sau: nếu thì nhãn của đỉnh () phải đi trước nhãn của đỉnh () trong thứ tự từ điển hoặc trùng với nó.
Nhắc lại: Ta nói là đi trước trong thứ tự từ điển nếu như:
- hoặc ;
- hoặc với ;
- hoặc với .
Dữ liệu vào
- Dòng đầu tiên chứa hai số nguyên dương và được ghi cách nhau bởi dấu cách là số đỉnh và số cạnh của đồ thị về mối quan hệ quen biết.
- Mỗi dòng trong số dòng tiếp theo chứa số nguyên được ghi cách nhau bởi dấu cách là hai chỉ số của hai đỉnh đầu mút của một cạnh.
Dữ liệu ra
In ra số nguyên cách nhau bởi dấu cách, trong đó là chỉ số của đỉnh của đồ thị quan hệ quen biết theo cách đánh số thỏa mãn yêu cầu đã nêu. Nếu có nhiều cách đánh số thỏa mãn, in ra một cách bất kỳ.
Ràng buộc
- , ;
- đồ thị là đơn đồ thị vô hướng liên thông.
Subtasks
- Subtask 1 ( số test): ;
- Subtask 2 ( số test): , ;
- Subtask 3 ( số test): , .
Ví dụ
| Input | Output | Giải thích |
|---|---|---|
| 4 5 1 3 1 4 2 3 2 4 3 4 |
1 4 3 2 | Sau khi đánh số lại, các cạnh là -, -, -, -, -. Thuật toán lần lượt cố định các đỉnh và cho các nhãn , , , , theo đúng thứ tự từ điển. |
| 4 3 1 2 1 3 1 4 |
1 4 3 2 | Ví dụ thêm (không có trong đề gốc). Đỉnh giữ số ; ba đỉnh còn lại đều có nhãn , các nhãn trùng nhau vẫn thỏa mãn yêu cầu. |
Bình luận