Informatyczny kącik olimpijski
Bajtockie kółeczko
Tym razem omówimy zadanie Bajtockie kółeczko z pierwszego etapu zawodów drużynowych X Olimpiady Informatycznej Gimnazjalistów.
Problem (Bajtockie kółeczko). W Bajtocji znajduje się miast (ponumerowanych kolejnymi liczbami naturalnymi od 0 do ) oraz dróg pomiędzy nimi. Miasta o numerach z przedziału znajdują się na okręgu, zaś miasto o numerze 0 (stolica) jest środkiem tego okręgu. Pomiędzy każdym miastem na okręgu oraz stolicą istnieje dwukierunkowe połączenie ( oznacza czas przejazdu pomiędzy stolicą a -tym miastem). Dodatkowo, pomiędzy każdymi dwoma sąsiednimi miastami na okręgu istnieje dwukierunkowe połączenie ( oznacza czas przejazdu pomiędzy -tym miastem a miastem sąsiadującym z prawej strony). Naszym zadaniem jest zaplanowanie podróży po Bajtocji. W tym celu musimy wybrać miasto, z którego wyruszymy oraz miasta, które odwiedzimy. Podróż musi zaczynać się i kończyć w tym samym mieście. Każda droga oraz każde miasto (poza miastem, w którym zaczynamy i kończymy podróż) może zostać odwiedzone co najwyżej raz. Ile czasu potrwa najdłuższa taka podróż?
Naszym zadaniem, w terminologii grafowej, jest znalezienie cyklu o największej sumie wag krawędzi. Rozważmy dwa przypadki:
- do cyklu nie należy wierzchołek 0 - wówczas mamy tylko jedną możliwość wyboru cyklu, którego suma wag krawędzi wynosi:
- do cyklu należy wierzchołek 0 - ten przypadek zostanie dokładnie opisany w dalszej części rozwiązania.
Rozwiązanie
Rozważamy przypadek, kiedy stolica należy do cyklu. W tym przypadku dokładnie dwie krawędzie incydentne ze stolicą należą do cyklu. Zauważmy, że dla ustalonych krawędzi incydentnych ze stolicą łatwo znaleźć najdłuższy cykl. Załóżmy, że do cyklu należą krawędzie: oraz dla i Wówczas istnieją dokładnie dwa cykle zawierające obie te krawędzi:
- - zakładamy, że od -tego wierzchołka poruszamy się w lewo,
- - zakładamy, że od -tego wierzchołka poruszamy się w prawo.
Suma wag krawędzi cyklu wynosi:
zaś suma wag krawędzi cyklu wynosi:
Zatem dla ustalonych krawędzi incydentnych ze stolicą (krawędzi do wierzchołków oraz ) wynikiem jest
Aby znaleźć cykl o największej sumie wag krawędzi, wystarczy rozpatrzyć każdą parę krawędzi incydentnych ze stolicą. Dla każdej takiej pary należy obliczyć wynik i spośród otrzymanych wyników wybrać maksimum. W ten sposób otrzymujemy rozwiązanie, które działa w czasie
Rozwiązanie
Zauważmy, że możemy w czasie stałym obliczać sumę wag krawędzi na spójnym fragmencie obwodu przy wykorzystaniu sum prefiksowych. Wówczas otrzymujemy rozwiązanie, które działa w czasie
Rozwiązanie
Ustawmy wierzchołki, które znajdują się na obwodzie, w ciąg (jeden za drugim) oraz zduplikujmy otrzymany ciąg.
Niech oznacza odległość od wierzchołka numer do kolejnych kopii stolicy, dokładnie:
Dla każdego całkowitego znajdujemy najdłuższy cykl, który zawiera krawędź Zauważmy, że długość tego cyklu wynosi: dla takiego największego że Znalezienie największej takiej wartości w ciągu można zrealizować drzewem przedziałowym (dlaczego?). Spośród wyników obliczonych dla każdego wybieramy największy. W ten sposób otrzymujemy rozwiązanie, które działa w czasie