Chuyến Xe Gringotts
Ngân hàng Gringotts đang vận chuyển vàng từ kho tổng về căn hầm tại Hogwarts. Hệ thống hầm mỏ gồm trạm (đánh số từ đến ) và tuyến đường xe kéo một chiều.
Các yêu tinh Gringotts cho phép bạn điều phối xe kéo, nhưng sau đó sẽ phá hoại hệ thống để giữ vàng lại ngân hàng.
Thể thức
Giai đoạn 1 - Đề xuất: Bạn nhận xe kéo và phải phân bổ chúng vào tuyến đường, thỏa mãn:
- Tổng xe đi ra từ bằng
- Tại mỗi trạm trung gian (): tổng xe vào = tổng xe ra (bảo toàn luồng)
- Số xe trên mỗi tuyến là số nguyên không âm
Giai đoạn 2 - Phá hoại: Yêu tinh chọn tối đa tuyến đường và phong tỏa hoàn toàn. Chúng sẽ chọn sao cho lượng xe về được là nhỏ nhất.
Mục tiêu: Phân bổ xe sao cho lượng xe tối đa về được sau khi bị phá hoại là lớn nhất.
Cài đặt
Bạn cần cài đặt hàm sau:
long long solve(int N, int M, int S, int T, int K, long long V,
std::vector<int> U, std::vector<int> W);
- : số trạm và số tuyến đường
- : trạm nguồn và trạm đích
- : số tuyến đường tối đa bị phá
- : tổng số xe kéo
- : tuyến đường thứ đi từ đến
Trong hàm này, bạn phải gọi đúng một lần:
void assign_carts(std::vector<long long> C);
với là mảng phần tử, là số xe phân bổ cho tuyến đường thứ .
Giá trị trả về của hàm solve không được sử dụng.
Ràng buộc
- Đồ thị có thể có cạnh song song và/hoặc tự vòng
- Luôn tồn tại ít nhất một đường đi từ đến
Subtasks
| Subtask | Điểm | Ràng buộc |
|---|---|---|
| 1 | 15 | |
| 2 | 20 | , |
| 3 | 30 | Đồ thị là lưới ô vuông |
| 4 | 35 | Không có ràng buộc bổ sung |
Ví dụ
| Input | Output | Giải thích |
|---|---|---|
Tuyến: |
Nếu assign_carts({100, 0, 100, 0)}: yêu tinh phá thì 0 xe về được.Nếu assign_carts({50, 50, 50, 50}): yêu tinh phá bất kỳ đường nào, vẫn có 50 xe về được. Đây là phương án tối ưu. |

Bình luận