trang chủ / bài tập / lazystud

Sinh viên lười (Lazy Student)

Đề bài

Mô tả

Cho một đồ thị vô hướng có trọng số gồm n đỉnh và m cạnh, không có khuyên và không có cạnh bội. Với mỗi cạnh, người ta cho biết trọng số wj của nó và một cờ bj{0,1} chỉ ra cạnh đó có thuộc một cây khung nhỏ nhất (MST) đã tìm được hay không (bj=1 nếu thuộc, bj=0 nếu không).

Tuy nhiên, danh sách các đỉnh đầu mút của các cạnh đã bị mất. Hãy phục dựng đồ thị: với mỗi cạnh j, hãy chỉ ra một cặp đỉnh (uj,vj) sao cho:

  • Đồ thị thu được liên thông, không có khuyên và không có cạnh bội.
  • Tập các cạnh có bj=1 tạo thành một cây khung nhỏ nhất của đồ thị (tổng trọng số của chúng đúng bằng trọng số của MST).

Nếu có nhiều cách phục dựng hợp lệ, in ra một cách bất kỳ. Nếu không tồn tại đồ thị nào thoả mãn, in ra 1.

Dữ liệu vào

  • Dòng đầu chứa hai số nguyên nm (1n105, 1mmin(n(n1)2,105)) — số đỉnh và số cạnh.
  • m dòng tiếp theo, dòng thứ j chứa hai số nguyên wjbj (1wj109, bj{0,1}).

Đảm bảo có đúng n1 giá trị bj bằng 1 và đúng mn+1 giá trị bj bằng 0.

Dữ liệu ra

  • Nếu không tồn tại đồ thị thoả mãn, in ra 1.
  • Ngược lại, in ra m dòng. Dòng thứ j chứa ujvj (1uj,vjn, ujvj) — hai đầu mút của cạnh thứ j theo đúng thứ tự dữ liệu vào.

Ràng buộc

  • 1n105
  • 1mmin(n(n1)2,105)
  • 1wj109, bj{0,1}
  • Có đúng n1 cạnh bj=1 và đúng mn+1 cạnh bj=0.

Ví dụ

Input Output Giải thích
4 5
2 1
3 1
4 0
1 1
5 0
1 3
1 4
2 3
1 2
2 4
Ba cạnh có b=1 trọng số {2,3,1} tạo thành cây khung là hình sao tâm tại đỉnh 1, tổng trọng số =6 — đây là MST. Hai cạnh còn lại trọng số 45 đều lớn hơn các cạnh cây nằm trên chu trình mà chúng tạo ra, nên không thể thay thế cạnh nào của MST.
3 3
1 0
2 1
3 1
-1 Cạnh đầu có b=0, trọng số 1, nhỏ hơn cả hai cạnh MST. Nếu thêm cạnh này vào MST, nó sẽ tạo chu trình mà nó là cạnh nhỏ nhất, mâu thuẫn với tính chất MST.

Đáp án không duy nhất: bất kỳ cách phục dựng nào thoả mãn các điều kiện trên đều được chấp nhận.

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.46 awk 1.3.4 gcc 16.1.0 csc 6.12.0.200 g++ 16.1.0 g++-themis 16.1.0 g++17 16.1.0 g++20 16.1.0 g++23 16.1.0 clang++ 22.1.6 dmd 2.112.0 dart 3.12.1 gforth 0.7.3 gfortran 12.2.0 go 1.26.3 groovyc 5.0.6 javac 25.0.3 node 26.2.0 kotlinc 2.3.21 sbcl 2.2.9 lua 5.4.8 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.6 pike 8.0 pypy3 7.3.23 python3 3.14.5 racket 8.7 ruby 4.0.5 rustc 1.96.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 tclsh 8.6 bun 1.3.14 deno 2.8.1 v 0.5.1 zig 0.16.0