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

Khôi phục đồ thị

Đề bài

Mô tả

Có một đồ thị vô hướng, liên thông, không có khuyên và không có cạnh song song gồm n đỉnh, được đánh số từ 1 đến n. Đồ thị có một tính chất đặc biệt: mỗi đỉnh có nhiều nhất k cạnh kề với nó (tức bậc của mỗi đỉnh không vượt quá k).

Có người đã chọn một đỉnh của đồ thị và tính khoảng cách ngắn nhất từ đỉnh đó tới tất cả các đỉnh còn lại, thu được mảng d: d[i] là khoảng cách ngắn nhất từ đỉnh được chọn tới đỉnh i (số cạnh trên đường đi ngắn nhất).

Rất tiếc đồ thị ban đầu đã bị mất, chỉ còn lại mảng d. Hãy khôi phục lại một đồ thị bất kỳ thoả mãn đầy đủ các điều kiện trên và có mảng khoảng cách ngắn nhất đúng bằng d, hoặc cho biết không tồn tại đồ thị nào như vậy.

Dữ liệu vào

  • Dòng đầu chứa hai số nguyên nk.
  • Dòng thứ hai chứa n số nguyên d[1],d[2],,d[n].

Dữ liệu ra

  • Nếu không tồn tại đồ thị thoả mãn, in ra một số 1.
  • Ngược lại, dòng đầu in số nguyên m là số cạnh của đồ thị tìm được (0m106). Trong m dòng tiếp theo, mỗi dòng in hai số nguyên ab (1a,bn; ab) mô tả một cạnh nối đỉnh a và đỉnh b. Đồ thị không được có khuyên hay cạnh song song.

Nếu có nhiều đáp án, in ra một đáp án bất kỳ.

Ràng buộc

  • 1k<n105
  • 0d[i]<n

Ví dụ

Input Output Giải thích
3 2
0 1 1
2
1 2
1 3
Đỉnh 1 là đỉnh được chọn (khoảng cách 0). Nối 1 với 2 và 1 với 3, cả hai cách đỉnh 1 đúng 1 bước. Mỗi đỉnh có bậc tối đa 2.
4 2
2 0 1 3
3
2 3
3 1
1 4
Đỉnh 2 được chọn. Đường đi 2 - 3 - 1 - 4 cho khoảng cách 0, 1, 2, 3 tới các đỉnh 2, 3, 1, 4. Mỗi đỉnh có bậc tối đa 2.
3 1
0 0 0
-1 Có tới ba đỉnh cùng khoảng cách 0, nghĩa là ba đỉnh gốc, điều này không thể xảy ra.

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