ďťż
  Dostawa



Damian Gronczewski - 5 mar 2010, o 19:14
" />Mam pytanie co do danych wejściowych w tym zadaniu.
Może mi ktoś wytłumaczyć co znaczą poszczególne cyfry w przykładowym teście.
1
2
1 1
2 3 4
1 5
8 3 2
5 2

Wiem że jest 1 test a miasto ma szerokość i długość 2 ulic ale reszta danych jest dla mnie zagadką.

Oczywiście proszę o zgłaszanie przykładowych testów.




Wojtek Nadara - 5 mar 2010, o 19:17
" />



Damian Gronczewski - 5 mar 2010, o 19:17
" />no teraz tak dzięki:D



Dawid Dąbrowski - 5 mar 2010, o 19:20
" />To są ilości ciężarówek, które dana ulica może zdzierżyć.
I tak, masz podane na przemian:
pierwszy rządek ulic poziomych, pierwszy rządek ulic pionowych, drugi rządek ulic poziomych, ...




Adrian Jaskółka - 5 mar 2010, o 23:56
" />jakieś testy może? jeden mój ręcznie wklepany:

in:
1
5
10 12 5 3 65
17 5 7 34 65 6
45 9 12 54 6
4 10 56 12 5 10
3 10 20 54 10
15 16 10 50 10 50
10 9 6 2 65
9 6 2 20 54 20
20 12 64 54 10
8 9 6 20 10 20
10 17 9 10 54

out:
27



Marcin Smulewicz - 6 mar 2010, o 00:39
" />Potwierdzam i wrzucam test od siebie.

in:
1
5
10 1 3 2 10
12 8 1 1 11 10
5 1 2 5 10
18 2 1 1 4 3
16 7 5 2 5
2 10 1 2 4 3
8 8 6 5 4
10 5 2 2 13 10
1 3 2 1 1
12 10 4 3 12 30
13 2 10 11 20

out:
20



Adrian Jaskółka - 6 mar 2010, o 00:51
" />potwierdzam.



Aleksander Kramarz - 6 mar 2010, o 02:37
" />Potwierdzam oba testy



Aleksander Kramarz - 6 mar 2010, o 02:52
" />Większy test: http://www.sendspace.pl/file/140eeb6d0241ce876012269

time ./dos < in
420213910

real 0m3.006s
user 0m2.960s
sys 0m0.012s



Grzegorz Milka - 6 mar 2010, o 08:13
" />Potwierdzam większy test.



Aleksander Kramarz - 6 mar 2010, o 13:13
" />A jak czasy?



Krzysztof Puzdrowski - 6 mar 2010, o 21:58
" />http://w258.wrzuta.pl/plik/3kBai0Xe6xS/dos2.tar.gz

ubuntu@ubuntu:~/Desktop$ time ./dos<dos2.in
846623873

real 0m1.416s
user 0m1.324s
sys 0m0.088s

Potwierdza ktoś? I z jakim czasem? Sorry, jeżeli odpowiedź można jakoś trywialnie znaleźć, to jest tylko w 100% losowy test wydajnościowy?



Dawid Dąbrowski - 6 mar 2010, o 23:06
" />Potwierdzam, Krzysiu Ładny test, Krzysiu Aleś sie napracował, KRZYSIU!

I potwierdzam wszystko z forum



Łukasz Solak - 6 mar 2010, o 23:13
" />[fingon@fingon-notebook 3]$ time ./dos < dos2.in
846623873

real 0m1.956s
user 0m1.857s
sys 0m0.090s



Aleksander Kramarz - 6 mar 2010, o 23:17
" />time ./dos < dos2.in
846623873

real 0m2.818s
user 0m2.436s
sys 0m0.060s



Marcin Smulewicz - 7 mar 2010, o 11:58
" />To może ja wrzucę jakiś ambitniejszy test:

http://w755.wrzuta.pl/plik/aE3cidjD90g/max
out: 1000000000

Mój czas na tym teście 3,6s.
Ktoś potwierdzi i pochwali się czasem?



Łukasz Solak - 7 mar 2010, o 12:43
" />time ./dos < max.in
1000000000

real 0m4.284s
user 0m4.180s
sys 0m0.100s



Grzegorz Milka - 7 mar 2010, o 15:04
" />Test Krzysia, potwierdzam:
real 0m0.543s
user 0m0.480s
sys 0m0.060s
Test Marcina, potwierdzam
real 0m1.402s
user 0m1.360s
sys 0m0.030s
Skompilowane z opcją O2.



Wojtek Nadara - 7 mar 2010, o 17:36
" />Cóż, zabrakło mi jakiejś godziny, aby to zadanie napisać :<. Niestety już nie zdążę :/. Implementacja mi idzie zawsze jak krew z nosa xp (Owce na OI'u implementowałem 3h, aby i tak dostać 20 pkt xp).



Krzysztof Puzdrowski - 7 mar 2010, o 17:45
" />O kurde w odpowiedzi do testu Smulewicza jest błąd !! Przeczytajcie dokładnie treść zadania. Ja pierdziele dobrze że sprawdziłem na wszelki wypadek jeszcze raz moje rozwiązanie przed wysłaniem



daredeva - 7 mar 2010, o 17:59
" />tez sie cieszymy.



Łukasz Kalinowski - 7 mar 2010, o 18:03
" />17:57 - godzina zgłoszenia... Teraz pozostaje cierpliwie czekać na to, czy nie popełniłem jakiegoś błędu, bo nie odważę się już tego testować ^^



Aleksander Kramarz - 7 mar 2010, o 18:17
" />No cóż, to jak należało to napisać na 10pkt? Bo maksymalny przepływ metodą Dinica radził sobie dobrze z losowymi danymi, test Marcina go ubił.



Dawid Dąbrowski - 7 mar 2010, o 18:21
" />Z twierdzenia o maksymalnym przepływie i minimalnym przekroju. Bądź też jak kto woli z przepływu w grafach s,t-planarnych, które to wynika z tego pierwszego twierdzenia. Do wyboru, do koloru.



Grzegorz Milka - 7 mar 2010, o 19:04
" />W praktyce ja dostawę zrobiłem jako znajdowanie najkrótszej ścieżki między którymś z wierzchołków za górnym/prawym bokiem a lewym/dolnym. Przyczym wierzchołek to parcele między skrzyżowaniami a krawędzie łączące to drogi między parcelami o odpowiednich wagach.



Adrian Jaskółka - 7 mar 2010, o 19:06
" />Generalnie problem przedstawiony w zadaniu jest problemem maksymalnego przepływu w grafie. Korzystamy z twierdzenia że maksymalny przepływ w grafie równy jest minimalnemu przekrojowi w tymże. Postać grafu (kratka taka) ułatwia znalezienie minimalnego przekroju. Tworzymy sobie drugi graf gdzie wierzchołkami są przestrzenie między ulicami a dwa wierzchołki są połączone krawędzią gdy te przestrzenie się stykają. Długość owej krawędzi jest równa przepustowości ulicy która jest między tymi dwoma przestrzeniami. Tworzymy sobie również 2 dodatkowe wierzchołki specjalne. Jeden łącze z każdą przestrzenią brzegową z dołu i lewej strony miasta i długość krawędzi jest równa przepustowości zewnętrznej ulicy. Drugi tak samo łącze z każdą przestrzenią brzegową z góry oraz prawej strony. Między wierzchołkiem specjalnym a normalnym może istnieć więcej niż jedna krawędź (z zasadzie tylko między specjalnym oraz lewym dolnym, bądź prawym górnym). W tak utworzonym grafie musimy znaleźć najkrótszą ścieżkę od jednego do drugiego specjalnego wierzchołka. Robimy to Dijkstrą i mamy rozwiązanie o złożoności O(n*n*log n).

Podziwiajcie mego skilla w paincie:


To jest graf dla przykładu z treści zadania. Czerwone wierzchołki to dodane wierzchołki specjalne.



Krzysztof Puzdrowski - 7 mar 2010, o 19:08
" />Fajne zadanie, jak Dawid wymyślił u góry, bazuje na tw. maxflow-mincut, a mincuta znajdujemy rysując dikstrą taką kreskę przecinającą kolejne ściany począwszy od ścian towarzyszących lewemu dolnemu bokowi kwadratu, do ścian towarzyszących prawemu górnemu rogu (wierzchołki grafu, to środki kwadracików).



Aleksander Kramarz - 7 mar 2010, o 19:13
" />No nie powiem, sprytne. Niestety nie wpadłem. Gratuluję.



Krzysztof Puzdrowski - 7 mar 2010, o 21:22
" />Adrian, miałem dokładkie taki sam rysunek do debugowania przykładów :p tzn. chodzi o rozmieszczenie wierzchołków



Wojtek Nadara - 7 mar 2010, o 22:02
" />Ja wymyśliłem algorytm do dostawy w złożonosci O(2^{n^{2}}*n^{6}), ale jakoś nie chciało mi się go kodzić xD. Polegał na obserwacji, że nie ma sensu jechać w trakcie 1 ścieżki jedną krawędzią w jedną stronę, a na innej ścieżce z drugą stronę, a wiec mogę sobie rozpatrzyć 2^{n^{2}} grafów skierowanych, bo każdej krawędzi mogę przyporządkować skierowanie, a potem Edmonds-Karp. O maksymalnych przepływach zacząłem się uczyć trochę wczoraj i jeszcze trochę dzisiaj się uczyłem, ale to, że w grudniu złapałem niemickiego wirusa, którego jeszcze nie wykurzyłem spowodowało to, że filmik z wykładu o przepływach z http://www.was.zaa.mimuw.edu.pl ładował mi się 10 razy wolniej niż normalnie się go ogląda i obejrzałem tylko metodę Forda-Fulkersona i algorytm Edmondsa-Karpa, a maxflow-mincut był dopiero po nich xp. A notatek mi się czytać nie chciało xD.
Jak nagadałem jakieś brednie, to mnie poprawcie xp.



Wojtek Nadara - 7 mar 2010, o 23:20
" />Btw istniało inne rozwiązanie w złożoności O(n^2 log n). Jest ono autorstwa Łukasza Kalinowskiego (niestety dostał on tylko 6 pkt przez TLEki mimo optymalnej złożoności, najprawdopodobniej przez używanie seta).
Najpierw wybieramy se ścieżkę idącą po lewym boku miasta, a potem po dolnym. Całe miasto kolorujemy na zielono (kolory przydzielamy polom). Przez daną ścieżkę będziemy w każdej chwili rozumieli granicę między zielonymi, a czerwonymi polami, przy czym to co jest na lewo i w dół od miasta jest czerwone xp.
Wszystkie krawędzie wrzucamy do seta. Bierzemy najmniejszą drogę z seta, dodajemy ją do wyniku i ją objeżdżamy zamieniając sąsiadujące z nią pole na czerwone, przez co przy każdej zmianie zmieniamy stan maksymalnie 4 dróg. Wyrzucamy z seta te krawędzie, które usunęliśmy, do wyniku doliczamy wartość najmniejszej i wrzucamy do seta wartość nowej drogi.
Wartym zauważenia faktem jest, że wszystkie drogi w czerwonej części zostały w pełni wykorzystane, a wszystkie drogi w zielonej części są nienaruszone.
Trzeba jednak jeszcze pamiętać o aktualizacji wartości dró, czyli o tym, że jak usuwamy krawędź o wartości 2, to trzeba wszystkim krawędziom, które należały do tej drogi zmniejszyć wartość o 2. To jednak jest trochę za długie, bo liniowo od krawędzi dla każdej drogi. Jednak z tym można sobie poradzić w taki sposób, że za każdym razem wrzucamy do seta wartość danej drogi jaki wartość danej drogi+ wynik, a gdy wyjmujemy, to do wyniku dodajemy zmodyfikowaną wartość drogi minus aktualny wynik.

Dowodu poprawności nie znam, ale może nim być chociażby 7 na 7 zaliczonych testów, w których Łukasz nie przekroczył czasu xp.
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • albionteam.htw.pl
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • cichooo.htw.pl