|
Informatyka UJ forum Rocznik 2005 - czyli najlepsze forum w sieci
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
Gorfin
pijak
Dołączył: 06 Kwi 2006
Posty: 63
Przeczytał: 0 tematów
|
Wysłany: Pią 19:02, 22 Gru 2006 Temat postu: |
|
|
@cct: albo mi sie wydaje, albo Twoje binarki do V nie chodza na przykladowym tescie :)
|
|
Powrót do góry |
|
|
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
cct
pijak
Dołączył: 21 Mar 2006
Posty: 202
Przeczytał: 0 tematów
|
Wysłany: Pią 21:49, 22 Gru 2006 Temat postu: |
|
|
Gorfin napisał: | @cct: (...) mi sie wydaje,(...) |
O, właśnie to.
BTW program dobrze na 100% czyta z plików, za wklepywanie danych "z palca" nie odpowiadam.
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
Gorfin
pijak
Dołączył: 06 Kwi 2006
Posty: 63
Przeczytał: 0 tematów
|
Wysłany: Pią 23:04, 22 Gru 2006 Temat postu: |
|
|
O to "z palca" mi chodzilo :)
Dzieki za wszystkie materialy.
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
neino
pijak
Dołączył: 16 Wrz 2006
Posty: 49
Przeczytał: 0 tematów
|
Wysłany: Czw 18:24, 28 Gru 2006 Temat postu: |
|
|
...poniewaz mam reprezentacje grafu Robsona a mimo wszystko walcze obecnie z TLE w zadaniu V i nie wiem zbytnio co poprawic to przedstawie swoja idee :
moja funkcja max_flow() wyglada w skrocie tak :
while (bfs()) { //tu wlasciwie z reprezentacja taka jak opisal cct_
1.wyznacz wartosc sciezki powiekszajcej //=increment
2. while (pred[u]>=0) { //istnieje poprzednik w sciezce
int v=pred[u];
int kon=count[v];
int pocz=count[v-1];
for (int i=pocz;i<kon;i++) {
if (krawedz[i].skad==v && krawedz[i].dokad==u) krawedz[i].flow+=increment;
}
kon=count[u];
pocz=count[u-1];
for (int i=pocz;i<kon;i++) {
if (krawedz[i].skad==u && krawedz[i].dokad==v) krawedz[i].flow-=increment;
}
u=pred[u];
}
max_flow += increment;
}
return max_flow;
mam wrazenie, ze to poprawianie krawedzi (petle for) powinno sie odbywac szybciej..co wy ludzie stosujecie tutaj bin_search-a :] ??
ogolnie bede wdzieczny za jakies sugestie,
pozdrawiam,
Kamil 'neino'
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
Spectro
Mistrz grilla
Dołączył: 09 Mar 2006
Posty: 2306
Przeczytał: 0 tematów
Skąd: Kurdwanów
|
Wysłany: Czw 21:51, 28 Gru 2006 Temat postu: |
|
|
(trzecia wersja posta)
@neino:
Zmień BFSa na DFSa rekurencyjnego, jeżeli ta nazwa nie jest historyczna ;) .
A w DFSie zapamiętuj ścieżkę rozszerzającą w odpowiedniej tablicy. W tym zadaniu niestety liczy się stała ;] .
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
kg86
zielony żul
Dołączył: 22 Gru 2005
Posty: 1194
Przeczytał: 0 tematów
Skąd: pochodze?
|
Wysłany: Pią 5:01, 29 Gru 2006 Temat postu: |
|
|
DFS w V jest bardzo istotny :) nie wnikalem bardzo dokladnie na czym polega graf Robsona - Ceceta :D ale zrobilem cos podobnego: rowniez posortowalem krawedzie leksykograficznie, a nastepnie kazdemu wierzcholkowi przyporzadkowalem 2 indeksy - pierwsza krawedz ktora z niego wychodzi i ostatnia :) takie przyporzadkowanie mozna zrobic liniowo po posortowaniu :) a wyznaczanie sciezki powiekszajacej robie w ten sposob, ze w struktrze wierzcholek ma zmienna "ktora", ktora oznacza indeks krawedzi ktora dotarlem do tego wierzcholka - potem wystarczy (po wyznaczeniu minimalnej krawedzi) isc od tylu i akutalizowac przeplywy :)
aha, i wydaje mi sie to istotne, aby kazdej krawedzi przyporzadkowac indeks krawedzi ktora idzie w druga strone - lepiej raz dla wszystkich, niz kilka razy dla tych samych, chociaz jeszcze lepiej jest wyznaczac to dynamicznie tylko wtedy kiedy trzeba, ale nie wiecej niz raz, dla danej krawedzi :) ja wyznaczalem raz dla wszystkich i TLE nie dostalem :)
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
chlebek
alkoholik
Dołączył: 04 Lut 2006
Posty: 556
Przeczytał: 0 tematów
Skąd: Siedlce\Kraków
|
Wysłany: Pią 12:54, 29 Gru 2006 Temat postu: |
|
|
Faktem jest, ze DFS jest lepszy w tym zadaniu, ale mi V i U przeszlo mi BFS ;]
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
neino
pijak
Dołączył: 16 Wrz 2006
Posty: 49
Przeczytał: 0 tematów
|
Wysłany: Pią 15:04, 29 Gru 2006 Temat postu: |
|
|
kg86 napisał: | a wyznaczanie sciezki powiekszajacej robie w ten sposob, ze w struktrze wierzcholek ma zmienna "ktora", ktora oznacza indeks krawedzi ktora dotarlem do tego wierzcholka |
to zalatwilo pierwsza petle for :) w powyzszym moim kodzie
kg86 napisał: |
aha, i wydaje mi sie to istotne, aby kazdej krawedzi przyporzadkowac indeks krawedzi ktora idzie w druga strone |
hmm a jak to sprytnie zrobic ? (czyli przerobic druga petla for w kodzie wyzej :/)
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
Spectro
Mistrz grilla
Dołączył: 09 Mar 2006
Posty: 2306
Przeczytał: 0 tematów
Skąd: Kurdwanów
|
Wysłany: Pią 16:42, 29 Gru 2006 Temat postu: |
|
|
@neino:
Np. w każdej krawędzi trzymać indeks krawędzi przeciwnej. Tak, jak to opisał cct.
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
neino
pijak
Dołączył: 16 Wrz 2006
Posty: 49
Przeczytał: 0 tematów
|
Wysłany: Pią 17:28, 29 Gru 2006 Temat postu: |
|
|
hmm...dzieki za pomoc...ale wciaz TLE :]
obecnie polaczenia trzymam w tablicy
struct TKrawedz {
int skad,dokad,flow,waga;
int odwr;//indeks odwrotnej krawedzi,zmieniajacy sie jedynie przy qSORT
};
moze niepotrzebnie trzymam n1+n2 polaczen ze zrodla do wierzcholkow i z wierzcholkow do ujscia ? :/
EDIT : przeszlo :) po zmianie DFS-a na rekurencyjnego...dzieki cct za Twoja wersje ;] do wszystkich : nie warto uzywac tu kolejki do trzymania wierzcholkow DFS
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
exeman
Mistrz grilla
Dołączył: 03 Lut 2006
Posty: 1603
Przeczytał: 0 tematów
Skąd: znienacka
|
Wysłany: Czw 22:40, 04 Sty 2007 Temat postu: |
|
|
cecet napisał: |
przeplywWRezydualnym( wezel, v ) -= struzka
przeplywWRezydualnym( v, wezel ) += struzka
|
Czy dobrze rozumiem, ale znalezienie " przeplywWRezydualnym( v, wezel )" zajmie nam czas liniowy?
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
exeman
Mistrz grilla
Dołączył: 03 Lut 2006
Posty: 1603
Przeczytał: 0 tematów
Skąd: znienacka
|
Wysłany: Pią 1:00, 05 Sty 2007 Temat postu: |
|
|
Generator do V ma wszedzie napisane, ze jest generatorem do U, o co chodzi?
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
exeman
Mistrz grilla
Dołączył: 03 Lut 2006
Posty: 1603
Przeczytał: 0 tematów
Skąd: znienacka
|
Wysłany: Pią 3:51, 05 Sty 2007 Temat postu: |
|
|
cct, wstawiles delaye w ten generator? Bo generowanie np. 100 malych testow to wiecznosc trzeba czekac, ja czekalem z 10 minut i przerwalem
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
cct
pijak
Dołączył: 21 Mar 2006
Posty: 202
Przeczytał: 0 tematów
|
Wysłany: Sob 3:03, 06 Sty 2007 Temat postu: |
|
|
exeman napisał: | cct, wstawiles delaye w ten generator? Bo generowanie np. 100 malych testow to wiecznosc trzeba czekac, ja czekalem z 10 minut i przerwalem |
Żeby nie było kolizji krawędzi (tzn, żeby nie losował takich samych) trzymam po prostu gigantyczną tablicę booli, w której sprawdza już generator istnienie danej krawędzi (trochę inaczej dla u i v). Między testami ją czyści, 10^8 elementów - może trochę trwać. To samo z losowaniem. No i może się coś zapętlić (niby jakoś tam poprawia sobie dane, aby było możliwe wygenerowanie zawsze odpowiedniej liczby krawędzi, ale może coś przegapiłem). Ogółem, generuj sobie pliki po paręnaście testów - z reguy jeśli będziesz miał dobrze na jednej paczce, to będziesz miał dobrze na wszystkich.
Ewentualnie zrób sobie jakiś plik batchowy, np. po winem plik "testuj.bat":
Kod: | genv 10 20 20 >1
v_cct <1 >1_cct
v_moje <1 >1_moje
genv 10 20 20 >2
v_cct <2 >2_cct
v_moje <2 >2_moje
genv 10 20 20 >3
v_cct <3 >3_cct
v_moje <3 >3_moje
comp *_cct *_moje |
Potem odpalasz i powinno jakoś tak to wyglądać. (Of koz bardzo łopatologiczna to wersja, nie chce mi się wgłębiać w to jakoś).
Aha, legenda w opisach może być zła, na szybko pisałem ten generatorek - każdy chyba i tak wie o co chodzi.
Co do znajdywania wierzchołków - tak, ale liniowy po ilości następników wierzchołka, czyli się mocno i tak zamortyzuje. Można of koz przy sortowaniu pamiętać pozycję odwrotnej krawędzi - wtedy czas stały. Można też logarytmicznie lecieć binSearchem po liście następników jeśli się odpowiednio posortuje wg obu wierzchołków (skąd i dokąd). Ogółem, ja napisałem chamską liniówkę.
Nota bene, na ASD2 zawsze i wszędzie piszę chamską liniówkę i mi zawsze przechodzi. ;))
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
Rogal
Zjeb z kaszanką
Dołączył: 13 Mar 2006
Posty: 1745
Przeczytał: 0 tematów
Skąd: koło podbiegunowe
|
Wysłany: Sob 9:31, 06 Sty 2007 Temat postu: |
|
|
cct: Użyj seta :wink:
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
exeman
Mistrz grilla
Dołączył: 03 Lut 2006
Posty: 1603
Przeczytał: 0 tematów
Skąd: znienacka
|
Wysłany: Sob 13:45, 06 Sty 2007 Temat postu: |
|
|
A nawet bez kombinowania, to nie trzeba tej tablicy czyscic. Wystarczy wpisywac numer aktualnego zestawu.
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
cct
pijak
Dołączył: 21 Mar 2006
Posty: 202
Przeczytał: 0 tematów
|
Wysłany: Sob 15:13, 06 Sty 2007 Temat postu: |
|
|
Nie chce mi się, są fajniejsze rzeczy do roboty niż babranie się z minionymi zadankami i niepotrzebne otwieranie edytora. ;)
(BTW@exeman: mi generowanie 100 testów z parametrami 100 zajęło parę sekund, widać Ci się zapętliło; na 1000 1000 1000 czekałem 3mmin na procku 1,5GHz).
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
cheater_
Orajt:)
Dołączył: 28 Lut 2006
Posty: 1022
Przeczytał: 0 tematów
|
Wysłany: Nie 5:57, 07 Sty 2007 Temat postu: |
|
|
cct, czemu twoja binarka liczy test max do V (10MB) w 21sek, a moja w 4sek? :P ale pomijając to, przydała się, danke ;)
EDIT: żebyście przypadkiem nie pomyśleli że koduję o takiej porze :P skodowałem wcześniej, taraz się opierdalam :P
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
cct
pijak
Dołączył: 21 Mar 2006
Posty: 202
Przeczytał: 0 tematów
|
Wysłany: Nie 6:02, 07 Sty 2007 Temat postu: |
|
|
cheater_ napisał: | cct, czemu twoja binarka liczy test max do V (10MB) w 21sek, a moja w 4sek? :P ale pomijając to, przydała się, danke ;) |
Już pisałem, była tworzona na szybko. Są ciekawsze rzeczy, niż ciągłe siedzenie przed komputerem...
Cytat: | EDIT: żebyście przypadkiem nie pomyśleli że koduję o takiej porze :P skodowałem wcześniej, taraz się opierdalam :P |
...które przez sesję niestety właśnie uskuteczniam ;/ W tej chwili kodzę projekt z P2, OpierdalaczuSie ;P
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
Madras
Omylny Admin
Dołączył: 09 Lis 2005
Posty: 2021
Przeczytał: 0 tematów
Skąd: Z Pokoju :]
|
Wysłany: Wto 22:39, 09 Sty 2007 Temat postu: |
|
|
Oh yeah, cały dzień spędzony na walce z TLE, całe szczęście to było, mam nadzieję, ostatnie zadanie z ASD w moim życiu ;].
|
|
Powrót do góry |
|
|
|
|
Nie możesz pisać nowych tematów Nie możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz głosować w ankietach
|
fora.pl - załóż własne forum dyskusyjne za darmo
Powered by phpBB © 2001, 2005 phpBB Group
|