Informatyczny kącik olimpijski
Odśnieżanie
Zadanie Odśnieżanie z zeszłorocznego Obozu Naukowo-Treningowego im. A.
Kreczmara można sformułować w języku teorii grafów następująco.
W nieskierowanym, ważonym, spójnym grafie
wyróżniono cztery
wierzchołki. Należy usunąć część krawędzi z grafu tak, żeby nadal istniały
ścieżki pomiędzy każdą parą wyróżnionych wierzchołków i żeby suma
wag krawędzi, które pozostały w grafie, była jak najmniejsza.
Oznaczmy zbiór wierzchołków grafu
przez
i niech
oznaczają liczbę wierzchołków i krawędzi w grafie. Niech
będą wyróżnionymi wierzchołkami. Szukany
optymalny zestaw nieusuniętych krawędzi na pewno nie będzie zawierać cyklu.
Gdyby były tylko dwa wyróżnione wierzchołki,
i
to
nieusunięte krawędzie tworzyłyby najkrótszą ścieżkę z
do
W przypadku trzech wyróżnionych wierzchołków od ścieżki
z
do
w pewnym miejscu odchodziłaby jeszcze ścieżka do
Po chwili namysłu dochodzimy do wniosku, że w przypadku czterech
wyróżnionych wierzchołków nieusunięte krawędzie powinny tworzyć kształt
taki jak na poniższym rysunku. Wyróżnione wierzchołki są tutaj połączone
ścieżkami z pewnymi dwoma wierzchołkami
i
(nazwijmy je
wierzchołkami centralnymi), które również są połączone ścieżką. Bez straty
ogólności wierzchołek
i pewien inny wierzchołek
dla
są połączone z
pozostałe dwa są połączone
z
Rysunek obejmuje również przypadki, gdy niektóre wierzchołki
pokrywają się (np.
lub
) – w takich sytuacjach
odpowiednie ścieżki mają zerową długość.

Jeśli przez
oznaczymy długość najkrótszej ścieżki
pomiędzy wierzchołkami
i
to koszt powyższego rozwiązania
wynosi

Parę wierzchołków centralnych
i
możemy wybrać na
sposobów, zaś wierzchołek
na trzy sposoby. Jednak
złożoność czasowa algorytmu jest zdominowana przez obliczenie tablicy
które wykonujemy w czasie
za pomocą
wywołań algorytmu Dijkstry.
Zadanie można rozwiązać szybciej. Ustalmy
Niech graf
powstaje przez dodanie do grafu
dodatkowych wierzchołków
i dodatkowych krawędzi: wierzchołek
łączymy z każdym
wierzchołkiem
krawędzią o wadze
zaś
wierzchołek
łączymy z każdym
krawędzią o wadze
Zauważmy, że ścieżka
w grafie
odpowiada
rozwiązaniu, w którym jako wierzchołki centralne wybieramy
i
koszt takiego rozwiązania jest równy długości tej
ścieżki. Tak więc, aby rozwiązać zadanie, wystarczy dla każdego
znaleźć najkrótszą ścieżkę z
do
w grafie
Do konstrukcji grafu
musimy wyznaczyć wartości
dla
i
Ostatecznie nasze rozwiązanie wymaga
siedmiu wywołań algorytmu Dijkstry (czterech w grafie
do obliczenia
i po jednym w grafie
dla każdego wyboru
). Graf
ma
wierzchołków i
krawędzi, więc koszt
algorytmu Dijkstry jest w nim taki sam jak w grafie
Zatem
rozwiązanie działa w czasie