Jak rozwiązać ten problem, algorytmicznego - Gopher 2

głosy
0

Staram się rozwiązać ten problem https://open.kattis.com/problems/gopher2 :

Rodzina Gopher, po zażegnane zagrożenie psów, musi stawić czoła nowej drapieżnika.

ARE 𝑛 Gophers i 𝑚 otwory Gophera, każdy w oddzielne (𝑥, 𝑦) współrzędnych. Jastrząb przybywa i czy suseł nie osiągnie sekund dziura w 𝑠 jest podatny na zjedzone. Otwór można zapisać co najwyżej jeden suseł. Wszystkie gophers uruchomić w tym samym prędkości 𝑣. Rodzina Gopher potrzebuje strategii ucieczki, która minimalizuje liczbę podatnych>> swistakow.

t minimalizuje liczbę podatnych swistakow.

Podejście brute force byłoby znalezienie wszystkich możliwych otwory osiągalne dla każdego susła, a następnie znaleźć odmiennymi (Gophera, otwór) par.

Czy istnieje szybszy algorytm?

Utwórz 02/12/2019 o 23:57
źródło użytkownik
W innych językach...                            


1 odpowiedzi

głosy
1

To mogą być formułowane jako przykład na maksymalną problemu dopasowywania liczność na dwustronnym wykresie.

Pozwolić Abędzie zbiorem swistakow i Bbędzie zbiorem otworów. Istnieje krawędź od susła a ∈ Ado otworu b ∈ B, jeśli odległość między nimi wynosi co najwyżej s*v, czyli odległości maksymalnej Gopher można uruchomić w dostępnym czasie.

Rozwiązanie polega podzbioru maksymalnej wielkości krawędzi na tym wykresie tak, że: (1) każdy a ∈ Ama co najwyżej jedną krawędzią (2), każdy b ∈ Bma co najwyżej jednej krawędzi. Ograniczenia stanowią zasady, że każdy suseł może iść tylko do jednego otworu, a każdy otwór może zmieścić tylko jeden swistaka. Liczba „wrażliwych” swistakow jest następnie liczba swistakow minus liczba krawędzi w dopasowaniu.

Wykres wykonuje O ( mn ) czasu konstrukcji i dopasowanie maksymalna liczność można znaleźć w O ( mn ) raz lub mniejszej, za pomocą standardowego algorytmu takiego jak Ford-Fulkersona , gdzie m oznacza liczbę swistaki i n oznacza liczbę otwory.

Jeśli to nie jest wystarczająco wydajny dla sędzia online, można wykorzystać bardziej efektywny algorytm do znalezienia dopasowania i bardziej skuteczny sposób na znalezienie krawędzi w grafie, np używając QuadTree do zapytania, które otwory są w odległości s*vod A Gophera w ramach O ( n ) w czasie.

Odpowiedział 03/12/2019 o 00:29
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more