Vâng, vấn đề là ở P sau khi tất cả. Tôi sẽ giữ câu trả lời trước vì nó cũng hoạt động cho trường hợp được chỉ đạo (đó là NPC, như đã trả lời cho câu hỏi khác) và cho thấy đó là F P T đối với l .PFPTl
Trong trường hợp không xác định, nó có thể giải quyết được, xác định thông qua dòng chi phí tối thiểu (điều này có thể không hoạt động trên thang đo mà bạn đang đề cập trong câu hỏi, nhưng nó tốt hơn thuật toán theo cấp số nhân.
Các thủ tục sau đây sẽ quyết định có một số lợi thế cạnh e = ( u , v ) ∈ E nên là một phần của đồ thị đầu ra. Để trả lời vấn đề ban đầu, chỉ cần lặp qua tất cả các cạnh.e=(u,v)∈E
Để tạo mạng lưu lượng, hãy làm như sau:
Bước 1: Mở rộng e để có đỉnh x e và thay thế e bằng các cạnh ( u , x e ) , ( x e , u ) , ( v , x e ) , ( x e , v ) (chúng được định hướng là a một phần của mạng lưu lượng), đặt chi phí của chúng thành 0.exee(u,xe),(xe,u),(v,xe),(xe,v)
Bước 2: thay thế mọi đỉnh t , ngoại trừ x e bằng hai đỉnh t - và t + , và thêm một cạnh ( t - , t + ) . Đặt chi phí của các cạnh này thành 1.txet−t+(t−,t+)
Bước 3: Thay thế mọi cạnh { a , b } ∈ E bằng các cạnh ( a + , b - ) , ( b + , a - ) . Đặt chi phí của các cạnh này thành 0.{a,b}∈E(a+,b−),(b+,a−)
Bước 4: Thêm một đỉnh mới y e và thêm các cạnh ( s , y e ) , ( t , y e ) với chi phí 0.ye(s,ye),(t,ye)
Bước 5: đặt tất cả các dung lượng thành 1.
Bây giờ hãy chạy thuật toán dòng chi phí tối thiểu, tìm kiếm luồng giá trị 2 từ x e đến y e .xeye
Phân tích:
- Mỗi luồng có 2 giá trị từ x e đến y e là một liên kết của một đường dẫn x e ⇝ s → y e và một đường dẫn x e ⇝ t → y e .xeyexe⇝s→yexe⇝t→ye
- Các đường dẫn không khớp nhau, vì với mỗi đỉnh t chỉ có 1 công suất trong cung ( t - , t + ) .t(t−,t+)
- Các đường dẫn được trả về là hai đường dẫn có tổng khoảng cách là tối thiểu và đó cũng là chi phí của luồng tìm thấy. Điều này cho phép chúng ta thêm e vào biểu đồ đầu ra hoặc xóa khác.e