Mam wydaje mi się, że ciekawy problem. Dużo uczy się algorytmów do najkrótszych / o najmniejszym koszcie scieżek, np BFS czy Dijkstra. Ale ostatnio zainteresowałem się najdłuższymi scieżkami, problem, gdzie krawędzie mają wagi jeden, i trzeba znaleźć najdłuższą scieżkę w takim grafie, już sobie z nim poradziłem: dzielę graf na SCC, wrzucam na kolejkę, z których nie wychodzą już żadne, mam licznik ile wychodzi krawędzi z każdego wierzchołka, i jak przetwarzam wierzchołek to idę po wszystkich krawędziech, którego do niego idą, i odejmuję jeden. I tak w kółko jak nic nie wychodzi to wrzucam na kolejkę, aktualizuje ile wchodzi..... - dynamik. Chodzi mi o to co jest w tym zadaniu:
https://atcoder.jp/contests/dp/tasks/dp_g , tylko w tym zadaniu nie trzeba dzielić na SCC, bo nie ma cykli.
Zastanawiam się jak znaleźć ścieżkę o największym koszcie, intuicyjne wydaje się, żeby zrobić Dijkstrę, tylko zamiast od najmniejszych iść do największych, tylko nie wiem czy to jest dobre. Bo teorytycznie wydaje mi się, że na podobnej zasadzie jak w algorytmie Dijkstry, będziemy mieć pewność, że jest to ścieżka o największym koszcie. Więc mam pytania:
1- czy to jest dobre
2 - Czy da się to zrobić w złożonności szybszej niż Dijkstra?
Z góry dziękuję za pomoc i poświęcony czas!
edit: oczywiście zakładam, że po każdej krawędzi można przejść maksymalnie raz, bo tak to byśmy sobie w kółko chodzili i zrobili koszt nieskończoność.
3 - czy algorytmy najdłuższch / o największym koszcie pojawiają się w zadaniach?, bo ja np. jeszcze nigdy się z czymś takim nie spotkałem, oprócz tego z Atcodera.