Đếm Cây Khung Nhỏ Nhất
Đề bài
Mô tả
Một tầng hầm gồm căn phòng xếp thành lưới hàng, cột. Hai phòng kề nhau (cùng hàng và kề cột, hoặc cùng cột và kề hàng) được ngăn bởi đúng một cánh cửa, mỗi cửa có chi phí mở riêng.
Bạn muốn mở một tập cửa sao cho từ phòng bất kỳ đều đi được tới mọi phòng còn lại, với tổng chi phí nhỏ nhất có thể. Nói cách khác, tập cửa được mở là một cây khung nhỏ nhất của lưới.
Hãy đếm số tập cửa khác nhau thoả mãn điều kiện trên (hai tập khác nhau nếu có ít nhất một cánh cửa thuộc tập này mà không thuộc tập kia), lấy phần dư khi chia cho .
Dữ liệu vào
- Dòng đầu: hai số nguyên , .
- dòng tiếp theo, dòng thứ gồm số nguyên: chi phí các cửa ngang của hàng , từ trái sang phải (số thứ là cửa giữa phòng và ).
- dòng tiếp theo, dòng thứ gồm số nguyên: chi phí các cửa dọc của cột , từ trên xuống dưới (số thứ là cửa giữa phòng và ).
Dữ liệu ra
Một số nguyên duy nhất: số cây khung nhỏ nhất, lấy modulo .
Ràng buộc
- Chi phí mỗi cửa là số nguyên với
Ví dụ
| Input | Output | Giải thích |
|---|---|---|
| 4 3 1 1 5 6 7 8 1 1 1 1 1 2 3 4 1 1 1 |
10 | Lưới có 10 cửa chi phí 1 nhưng chỉ dùng được 9 trong số đó (dùng cả 10 sẽ tạo chu trình), phần còn lại phải lấy thêm hai cửa chi phí 2 và 3. Có đúng 10 cách chọn xem cửa chi phí 1 nào bị bỏ lại. |
| 2 2 5 5 5 5 |
4 | Bốn phòng tạo thành một hình vuông với 4 cửa chi phí bằng nhau. Cây khung dùng 3 cửa bất kỳ trong 4 cửa, nên có 4 cách. |
Bình luận