USACO 2013 - Milk Routing

Xem PDF



Dạng bài
Ngôn ngữ cho phép
Assembly, Awk, C, C#, C++, Clang, Cobol, D, Groovy, Haskell, JS, Java, Kotlin, Lua, Node JS, OCaml, ObjectiveC, PHP, Pascal, Perl, Prolog, Pypy, Pypy 3, Python, Ruby, Rust, Scala, Scratch, Swift
Điểm: 1500 (p) Thời gian: 4.0s Bộ nhớ: 512M Input: bàn phím Output: màn hình

Trang trại của Farmer John có một mạng lưới cũ gồm \(M\) đường ống (\(1 \le M \le 500\)) để bơm sữa từ chuồng đến bể chứa sữa. Trong năm tới, ông muốn dỡ bỏ và nâng cấp phần lớn số đường ống này, nhưng vẫn muốn giữ nguyên các đường ống thuộc đúng một đường đi để tiếp tục bơm sữa từ chuồng đến bể chứa.

Mạng lưới đường ống được mô tả bởi \(N\) điểm nối (\(1 \le N \le 500\)), mỗi điểm có thể là đầu mút của một tập hợp các đường ống. Điểm nối \(1\) là chuồng, còn điểm nối \(N\) là bể chứa. Mỗi đường ống trong số \(M\) đường ống hai chiều nối một cặp điểm nối, đồng thời có một độ trễ (lượng thời gian để sữa đi từ đầu này đến đầu kia của đường ống) và một dung lượng (lượng sữa trên mỗi đơn vị thời gian có thể được bơm ổn định qua đường ống). Có thể có nhiều đường ống nối cùng một cặp điểm nối.

Đối với một đường đi gồm các đường ống nối từ chuồng đến bể, độ trễ của đường đi là tổng độ trễ của các đường ống trên đó, còn dung lượng của đường đi là giá trị nhỏ nhất trong các dung lượng của các đường ống trên đó (vì đây là "nút thắt cổ chai" giới hạn tốc độ tổng thể mà sữa có thể được bơm qua đường đi). Nếu FJ muốn gửi tổng cộng \(X\) đơn vị sữa qua một đường đi có độ trễ \(L\) và dung lượng \(C\), thời gian cần thiết vì thế là \(L + X/C\).

Với cấu trúc mạng lưới đường ống của FJ, hãy giúp ông chọn một đường đi duy nhất từ chuồng đến bể chứa sao cho có thể bơm \(X\) đơn vị sữa trong tổng thời gian nhỏ nhất.

Dữ liệu vào

  • Dòng đầu tiên chứa ba số nguyên \(N\), \(M\)\(X\), cách nhau bởi dấu cách (\(1 \le X \le 1\,000\,000\)).
  • \(M\) dòng tiếp theo, mỗi dòng mô tả một đường ống bằng bốn số nguyên \(I\), \(J\), \(L\), \(C\). \(I\)\(J\) (\(1 \le I, J \le N\)) là các điểm nối ở hai đầu đường ống. \(L\)\(C\) (\(1 \le L, C \le 1\,000\,000\)) lần lượt là độ trễ và dung lượng của đường ống.

Dữ liệu ra

In ra lượng thời gian nhỏ nhất để FJ gửi sữa dọc theo một đường đi duy nhất, làm tròn xuống số nguyên gần nhất.

Ví dụ

Ví dụ 1

Input
3 3 15
1 2 10 3
3 2 10 2
1 3 14 1
Output
27
Giải thích

FJ muốn gửi \(15\) đơn vị sữa qua mạng lưới đường ống. Đường ống số \(1\) nối điểm nối \(1\) (chuồng) với điểm nối \(2\), có độ trễ \(10\) và dung lượng \(3\). Đường ống số \(2\) và số \(3\) được định nghĩa tương tự.

Đường đi \(1 \to 3\) tốn \(14 + 15/1 = 29\) đơn vị thời gian. Đường đi \(1 \to 2 \to 3\) tốn \(20 + 15/2 = 27.5\) đơn vị thời gian và do đó là tối ưu.

Nguồn

USACO 2012 December Contest, Silver — Problem 3: Milk Routing

Tác giả đề: Brian Dean, 2012.

Bình luận

Mới nhất
Tải bình luận...

Không có bình luận nào.

Kỳ thi: