Bu problem bana bir çok karar ağacını hatırlatıyor. Her zaman en ümit vaat eden yolu seçmeye çalışan, ancak tüm alt maddeye bakarak bu tür bir çözüm düşünürdüm:
Lavabo düğümlerinden başlayarak, her seferinde bir seviye olan kaynaklara doğru ilerleyin. Bunu yaparken her kenara bir ağırlık verin. Bu ağırlık, "ödemek" zorunda kalacak minimum miktarı temsil etmeli ya da kenardan işaret eden düğümden başlayarak alt çizelgeyi geçerek "kazanacaksınız". Diyelim ki i + 1 seviyesindeyiz ve i seviyesine yükseliyoruz. İ seviyesindeki bir düğüme işaret eden bir kenar için ağırlık atamak istediğim şey:
- edge_weight = işaret_düğümü_ ağırlığı.
- "İşaret düğümü" nden başlayarak maksimum ağırlığı olan kenarı bulun. Bu ağırlık next_edge_weight olsun.
- edge_weight + = next_edge_weight
Ardından, siparişi aşağıdaki gibi oluşturun:
- S, arama sınırı olsun, yani bundan sonra seçilecek düğümler kümesi olsun.
- Düğümü seçerek (node_weight + maximum_edge_weight) büyütülmesini sağlayın.
- Düğümü grafikten ve S'den kaldırın. Düğümün "alt öğelerini" S'ye ekleyin.
- Grafik boş değilse, 1. adıma gidin.
- Dur.
Fikir, negatif ağırlık alt yazılarının maliyetini daha sonra kaldırabilmek için, ilk önce mümkün olduğunca fazla kazanç sağlayacak olan alt yazıların arasında dolaşmaktır.