Pembaruan: jawaban ini tampaknya cacat. Lihat komentar dari Kristoffer Arnsfelt Hansen.
Saya tidak tahu bagaimana menyelesaikan masalah Anda, tetapi di sini ada teknik untuk memecahkan versi sederhana dari masalah Anda: yaitu, diberi edge , uji apakah ada jalur sederhana dari s ke t yang mencakup edge e . (Ini sesuai dengan kasus khusus masalah Anda di mana l = ∞ .)estel = ∞
Anda dapat memecahkan masalah yang lebih sederhana ini menggunakan "aliran maksimum dengan batas bawah" sebagai subrutin. Dalam masalah max-flow standar, kapasitas setiap tepi memberi kita batas atas pada jumlah aliran yang melewati tepi itu, dan kami mensyaratkan bahwa jumlah aliran di tepi dibatasi lebih rendah oleh 0. Dalam "max-flow dengan batas bawah ", kami diizinkan untuk menentukan batas bawah dan batas atas jumlah aliran melalui tepi itu. Diketahui bahwa "aliran maksimum dengan batas bawah" dapat diselesaikan dalam waktu polinomial.
Sekarang, anggaplah kita memiliki tepi , dan kami ingin menguji apakah ada jalur sederhana dari s ke t yang mencakup tepi e . Kita akan mengatur max-flow dengan masalah batas bawah. Secara khusus, ambil grafik G dan tambahkan simpul baru s 0 dengan tepi s 0 → s dan simpul baru t 1 dengan tepi t → t 1 . Buat kapasitas (batas atas) pada setiap tepi 1. Batas bawah pada semua tepi adalah 0, kecuali batas bawah pada tepi e.e ∈ EsteGs0s0→ st1t → t1eadalah 1. Sekarang periksa apakah ada aliran yang layak dari ke t yang memenuhi semua batas (tes ini dapat dilakukan dalam waktu polinomial, seperti yang disebutkan di atas). Jika tidak ada aliran, maka tidak ada jalur sederhana dari s ke t . Jika ada aliran seperti itu, kemudian menelusuri keluar bahwa aliran menghasilkan jalur sederhana dari s ke t yang mencakup tepi e , sehingga memang ada jalur sederhana tersebut.ststste
Bagaimana kita memecahkan masalah "max-flow dengan batas bawah"? Dalam hal ini, hanya satu sisi yang memiliki batas bawah yang bukan nol. Oleh karena itu, kita dapat menggunakan pendekatan standar untuk aliran jaringan, di mana pada setiap titik kita memilih jalur penambah dengan menghitung jalur terpendek dalam grafik residual - kecuali bahwa di sini kita bertanya (secara kasar) bahwa salah satu jalur penambah mencakup tepi .e
Saya belajar ide ini dari makalah berikut:
(Pastikan untuk membaca versi laporan teknologi, bukan versi yang diterbitkan. Ide ini ditemukan di paragraf kedua dari pengantar.)
Sayangnya, saya tidak tahu bagaimana untuk memperluas teknik ini untuk memecahkan masalah asli Anda, dengan batas atas Anda pada panjang jalan sederhana.l
Atau, kami dapat memecahkan masalah Anda dengan cara langsung menggunakan integer linear programming (ILP). Dalam praktiknya, pemecah ILP cukup bagus pada banyak masalah. Namun, waktu berjalan terburuk mereka masih eksponensial, jadi ini tidak akan memberikan algoritma dengan waktu berjalan terburuk polinomial. Beri tahu saya jika Anda ingin saya menguraikan cara merumuskan ini menggunakan ILP.