#1422. ASSIGN - Phân công

Bộ nhớ: 256 MiB Thời gian: 500 ms Nhập/xuất từ luồng chuẩn
Kiểu bài: Thông thường Kiểu chấm: Trình chấm ngoài
Đưa lên bởi: Trùm CUỐI

Đề bài

NGUỒN: Bài tập thầy Lê Minh Hoàng ôn Hải Phòng T10/2016

𝑚 thợ và 𝑛 công việc, các thợ đánh số từ 1 tới 𝑚 và các việc đánh số từ 1 tới 𝑛 . Mỗi thợ có khả năng làm một số việc nào đó và mỗi việc có thể có một số thợ có thể làm được.

Hãy tìm cách phân công công việc cho các thợ thực hiện các công việc, mỗi việc chỉ phân cho một thợ và số việc làm được là nhiều nhất.

Dữ liệu vào:

  • Dòng đầu chứa hai số nguyên dương 𝑚, 𝑛 ≤ 10^5 ;
  • Tiếp theo là không quá 10^5 dòng, mỗi dòng có dạng hai số nguyên 𝑖, 𝑗 cho biết thợ 𝑖 có thể làm được việc 𝑗\ (1 ≤ 𝑖 ≤ 𝑚; 1 ≤ 𝑗 ≤ 𝑛) .

Dữ liệu vào:

  • Dòng đầu ghi số việc nhiều nhất có thể làm được;
  • Dòng thứ hai ghi 𝑛 số nguyên, số thứ 𝑗 là số hiệu người thợ được giao thực hiện việc 𝑗 , trong trường hợp việc 𝑗 không được làm, ghi ra số thứ 𝑗 là số 0 .

Ví dụ:

Dữ liệu vào:
4 3
1 1
1 3
2 1
2 2
3 2
4 1
Dữ liệu ra:
3
4 2 1