Bài Toán Phân Công

Đề bài

Mô tả

n công nhân và n công việc. Mỗi công nhân phải thực hiện đúng một công việc, và mỗi công việc phải được giao cho đúng một công nhân.

Chi phí để công nhân i thực hiện công việc jcij. Hãy tìm cách phân công có tổng chi phí nhỏ nhất và in ra cách phân công đó.

Dữ liệu vào

  • Dòng đầu chứa số nguyên n là số công nhân, cũng là số công việc.
  • n dòng tiếp theo, dòng thứ i chứa n số nguyên ci1,ci2,,cin là chi phí để công nhân i thực hiện từng công việc.

Dữ liệu ra

  • Dòng đầu in tổng chi phí nhỏ nhất.
  • n dòng tiếp theo, mỗi dòng in hai số nguyên ab cho biết công nhân a được giao công việc b. Mỗi công nhân và mỗi công việc phải xuất hiện đúng một lần, và tổng chi phí của cách phân công in ra phải đúng bằng số ở dòng đầu.

Các dòng phân công có thể in theo thứ tự bất kỳ. Nếu có nhiều cách phân công cùng đạt chi phí nhỏ nhất, in ra một cách bất kỳ.

Ràng buộc

  • 1n200
  • 1cij1000

Ví dụ

Input Output Giải thích
4
17 8 16 9
7 15 12 19
6 9 10 11
14 7 13 10
33
1 4
2 1
3 3
4 2
Công nhân 1 nhận việc 4 (chi phí 9), công nhân 2 nhận việc 1 (7), công nhân 3 nhận việc 3 (10), công nhân 4 nhận việc 2 (7). Tổng là 33.
2
1 2
1 100
3
1 2
2 1
Nếu công nhân 1 chọn việc rẻ nhất của mình là việc 1 (chi phí 1) thì công nhân 2 buộc phải nhận việc 2 với chi phí 100, tổng là 101. Nhường việc 1 cho công nhân 2 thì tổng chỉ còn 2+1=3.

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.400 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.2 gforth 0.7.3 gfortran 12.2.0 go 1.27.0 groovyc 5.1.1 javac 25.0.4 node 26.8.1 julia 1.12.7 kotlinc 2.4.10 lean 4.33.1 sbcl 2.2.9 lua 5.4.9 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.10 pike 8.0 swipl 9.0.4 pypy3 7.3.23 python3 3.14.7 racket 8.7 ruby 4.0.6 rustc 1.98.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 swiftc 6.3.3 tclsh 8.6 bun 1.4.0 deno 2.9.6 v 0.5.2 zig 0.16.0