trang chủ / đề bài / voi16_idcode

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 n đỉ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 A quen biết người B thì người B cũng quen biết người A 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ừ 1.

Bước 2: Mỗi đỉnh i của đồ thị được gán một nhãn Qi 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 1 là Q1=(0), các đỉnh còn lại là chưa có nhãn; đỉnh 1 là đã có nhãn nhưng nhãn của nó là chưa cố định.
  • Tại mỗi bước trong n bước tiếp theo, thực hiện các thao tác sau:
    • Tìm u 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 u;
    • Với mỗi đỉnh v kề với đỉnh u (nghĩa là có cạnh nối u với v):
      • Nếu v chưa có nhãn thì khởi tạo nhãn của v là Qv=(u);
      • Nếu v có nhãn chưa cố định thì thêm đỉnh u vào cuối nhãn hiện thời Qv của v.

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 Q đượ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 2 thỏa mãn tính chất sau: nếu u<v thì nhãn của đỉnh u (Qu) phải đi trước nhãn của đỉnh v (Qv) trong thứ tự từ điển hoặc trùng với nó.

Nhắc lại: Ta nói Qu=(p1,…,pi) là đi trước Qv=(q1,…,qj) trong thứ tự từ điển nếu như:

  • hoặc p1<q1;
  • hoặc (p1=q1),…,(pk=qk),(pk+1<qk+1) với k<min(i,j);
  • hoặc (p1=q1),…,(pi=qi) với i<j.

Dữ liệu vào

  • Dòng đầu tiên chứa hai số nguyên dương n và m đượ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ố m dòng tiếp theo chứa 2 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 n số nguyên d1,d2,…,dn cách nhau bởi dấu cách, trong đó di là chỉ số của đỉnh i 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

  • 2≤n≤2×104, 1≤m≤2×106;
  • đồ thị là đơn đồ thị vô hướng liên thông.

Subtasks

  • Subtask 1 (30% số test): n≤10;
  • Subtask 2 (30% số test): n≤1000, m≤104;
  • Subtask 3 (40% số test): n≤2×104, m≤2×106.

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à 1-3, 1-2, 4-3, 4-2, 3-2. Thuật toán lần lượt cố định các đỉnh 1,2,3,4 và cho các nhãn Q1=(0), Q2=(1), Q3=(1,2), Q4=(2,3), 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 1 giữ số 1; ba đỉnh còn lại đều có nhãn (1), các nhãn trùng nhau vẫn thỏa mãn yêu cầu.

Bình luận

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

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.47 awk 1.3.4 gcc 16.2.0 dotnet 10.0.402 g++ 16.2.0 g++-themis 16.2.0 g++17 16.2.0 g++20 16.2.0 g++23 16.2.0 clang++ 22.1.8 dmd 2.113.0 dart 3.13.6 gforth 0.7.3 gfortran 15.3.0 go 1.27.3 groovyc 5.1.3 javac 26.0.2.1 node 26.12.1 julia 1.13.2 kotlinc 2.4.21 lean 4.35.0 sbcl 2.2.9 lua 5.5.1 nim 2.2.12 fpc 3.2.2 fpc-themis 3.2.2 perl 5.42.3 php 8.5.12 pike 8.0 swipl 9.0.4 pypy3 7.3.23 python3 3.15.1 racket 8.7 ruby 4.0.8 rustc 1.99.1 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 swiftc 6.4.1 tclsh 8.6 bun 1.4.4 deno 2.9.8 v 0.5.2 zig 0.17.0