canuc80k4910·11/50

Khóa Các Bộ Thu

Nộp bài trên LQDOJ

Bài 49 · Network Flow

Một mạng có trạm đánh số từ đến , nối bằng các liên kết hai chiều. Trạm phát tín hiệu; trạm đặc biệt đang bật chức năng nhận.

Mỗi thao tác được chọn một trong hai cách: tắt một liên kết hai chiều; hoặc tắt chức năng nhận của một trạm đặc biệt. Tắt chức năng nhận không làm thay đổi liên kết: tín hiệu vẫn có thể đi qua trạm đó để tới trạm khác. Hãy tìm số thao tác ít nhất để không trạm đặc biệt đang bật nhận nào còn tới được từ trạm .

Input

  • Dòng đầu chứa .
  • Dòng thứ hai chứa chỉ số trạm đặc biệt đôi một khác nhau. Nếu , dòng này rỗng.
  • Mỗi trong dòng tiếp theo chứa , mô tả một liên kết hai chiều. Không có cặp liên kết lặp.

Output

  • In một số nguyên là số thao tác ít nhất.

Constraints

  • .
  • .
  • .
  • Mỗi trạm đặc biệt thuộc .
  • .

Scoring

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

Example

Test 1

Input

5 2 4
3 4
0 1
1 3
0 2
2 4

Output

2

Giải thích: Có hai nhánh độc lập từ trạm tới hai bộ thu, nên một thao tác không đủ. Tắt hai liên kết đầu nhánh hoặc tắt cả hai bộ thu đều cần đúng thao tác.

Lời giải tóm tắt
  • Phân tích: Nối mỗi trạm đặc biệt tới một siêu đích bằng cung capacity 1. Mỗi liên kết hai chiều được thay bằng hai cung capacity 1.
  • Thuật toán: Chạy Dinic từ 0 tới siêu đích và in giá trị maximum flow.
  • Chứng minh: Cắt một cung biểu diễn đúng một thao tác: hoặc tắt liên kết gốc, hoặc tắt chức năng nhận. Mọi đường tới siêu đích tương ứng một cách để tín hiệu tới một bộ thu còn hoạt động và ngược lại. Theo max-flow min-cut, giá trị tìm được là số thao tác nhỏ nhất.
  • Độ phức tạp: Mạng có O(n+e+g) cung; Dinic đủ nhanh với n≤100, bộ nhớ O(n+e+g).