Khoá tủ lạnh

Đề bài

Mô tả

n người, mỗi người sở hữu một tủ lạnh riêng. Các tủ lạnh được khóa bằng m sợi dây xích thép. Mỗi sợi xích nối hai tủ lạnh khác nhau và được bảo vệ bằng một khóa số. Chủ nhân của tủ lạnh biết mã của tất cả các sợi xích nối tới tủ của mình. Một tủ lạnh chỉ có thể mở được khi tất cả các sợi xích nối tới nó đã được mở khóa.

Cho phép tạo nhiều sợi xích giữa cùng một cặp tủ lạnh.

Tủ lạnh i được gọi là riêng tư nếu chỉ có chủ nhân (người i) mới có thể mở nó — không tồn tại người ji nào (một mình) mở được tủ i.

Trọng lượng của n tủ lạnh là a1,a2,,an. Tạo một sợi xích nối tủ u và tủ v tốn au+av đồng.

Bạn cần tạo đúng m sợi xích sao cho tất cả các tủ lạnh đều riêng tư, với tổng chi phí nhỏ nhất. Nếu không có cách nào thoả mãn, hãy báo cáo điều đó.

Dữ liệu vào

Dòng đầu tiên chứa một số nguyên T (1T10) — số bộ dữ liệu.

Với mỗi bộ dữ liệu:

  • Dòng thứ nhất chứa hai số nguyên n, m (2n1000, 1mn).
  • Dòng thứ hai chứa n số nguyên a1,a2,,an (0ai104).

Dữ liệu ra

Với mỗi bộ dữ liệu:

  • Nếu không tồn tại cách bố trí thoả mãn, in ra 1.
  • Ngược lại, in ra một số nguyên c là tổng chi phí nhỏ nhất. Sau đó in ra m dòng, mỗi dòng chứa hai số nguyên ui,vi (1ui,vin, uivi) mô tả sợi xích thứ i. Có thể có nhiều sợi xích nối cùng một cặp tủ.

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

Ràng buộc

  • 1T10
  • 2n1000
  • 1mn
  • 0ai104

Ví dụ

Input Output Giải thích
3
4 4
1 1 1 1
3 1
1 2 3
3 3
1 2 3
8
1 2
2 3
3 4
4 1
-1
12
1 2
2 3
3 1
Bộ 1: nối thành chu trình 12341, mỗi tủ có bậc 2 với hai láng giềng khác nhau nên đều riêng tư, chi phí =4·(1+1)=8.
Bộ 2: chỉ có 1 sợi xích, không thể làm cho 3 tủ đều riêng tư.
Bộ 3: chu trình 1231, chi phí =2(1+2+3)=12.
2
2 2
4 3
2 1
13 5
-1
-1
Khi chỉ có 2 tủ, mọi sợi xích đều nằm giữa 12; người 2 nắm hết mã các xích chạm tủ 1 nên mở được tủ 1. Không có cách nào cả hai tủ cùng riêng tư.

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 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