canuc80k4901·2/50

Băng Thông Cực Đại

Nộp bài trên LQDOJ

Bài 49 · Network Flow

Có máy chủ và kết nối một chiều. Kết nối truyền được nhiều nhất đơn vị dữ liệu trong một giây. Dữ liệu bắt đầu ở máy và cần đến máy ; nó có thể được chia thành nhiều phần và đi qua nhiều tuyến.

Một máy trung gian không được tạo thêm hay làm mất dữ liệu: tổng tốc độ nhận vào phải bằng tổng tốc độ gửi đi. Hãy xác định tốc độ tải lớn nhất có thể duy trì.

Input

  • Dòng đầu chứa và .
  • Mỗi trong dòng tiếp theo chứa , biểu diễn một kết nối từ đến có băng thông .

Output

  • In tốc độ truyền lớn nhất từ máy đến máy .

Constraints

  • .
  • .
  • .
  • .
  • Nhiều kết nối cùng hướng giữa hai máy được phép xuất hiện.

Scoring

  • Subtask ( số điểm): và .
  • Subtask ( số điểm): Không có giới hạn bổ sung.

Example

Test 1

Input

5 7
1 2 4
1 3 7
2 4 3
3 2 2
3 4 4
4 5 6
2 5 1

Output

7

Giải thích: Ta gửi đơn vị theo và đơn vị qua máy . Hai kết nối đi vào máy có tổng băng thông , nên không thể đạt tốc độ lớn hơn.

Lời giải tóm tắt
  • Phân tích: Gán lượng dữ liệu trên mỗi kết nối làm flow của cung tương ứng. Giới hạn băng thông là capacity, còn điều kiện không mất dữ liệu tại máy trung gian chính là bảo toàn luồng.
  • Thuật toán: Chạy Dinic trực tiếp trên mạng, với nguồn là đỉnh 1 và đích là đỉnh n. Mỗi pha gồm BFS phân tầng và DFS đẩy blocking flow; dùng long long cho capacity và tổng luồng.
  • Chứng minh: Mọi phương án truyền tạo thành một luồng hợp lệ và ngược lại. Dinic chỉ thực hiện các phép tăng luồng hợp lệ. Khi mạng dư không còn đường từ nguồn đến đích, định lý luồng cực đại-lát cắt cực tiểu chứng minh giá trị thu được là lớn nhất.
  • Độ phức tạp: Thời gian O(n^2m), bộ nhớ O(n+m).