Forum Informatyka UJ forum Strona Główna Informatyka UJ forum
Rocznik 2005 - czyli najlepsze forum w sieci
 
 FAQFAQ   SzukajSzukaj   UżytkownicyUżytkownicy   GrupyGrupy   GalerieGalerie   RejestracjaRejestracja 
 ProfilProfil   Zaloguj się, by sprawdzić wiadomościZaloguj się, by sprawdzić wiadomości   ZalogujZaloguj 

Zadania U/V- szybka reprezentacja grafu+ binarki+ generatory
Idź do strony Poprzedni  1, 2
 
Napisz nowy temat   Odpowiedz do tematu    Forum Informatyka UJ forum Strona Główna -> Archiwum / 1 rok / 2 i 3 semestr - Algorytmy i Struktury Danych
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Gorfin
pijak



Dołączył: 06 Kwi 2006
Posty: 63
Przeczytał: 0 tematów


PostWysł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 profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
cct
pijak



Dołączył: 21 Mar 2006
Posty: 202
Przeczytał: 0 tematów


PostWysł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 profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Gorfin
pijak



Dołączył: 06 Kwi 2006
Posty: 63
Przeczytał: 0 tematów


PostWysł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 profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
neino
pijak



Dołączył: 16 Wrz 2006
Posty: 49
Przeczytał: 0 tematów


PostWysł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 profil autora
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

PostWysł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 profil autora
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?

PostWysł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 profil autora
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

PostWysł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 profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
neino
pijak



Dołączył: 16 Wrz 2006
Posty: 49
Przeczytał: 0 tematów


PostWysł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 profil autora
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

PostWysł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 profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
neino
pijak



Dołączył: 16 Wrz 2006
Posty: 49
Przeczytał: 0 tematów


PostWysł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 profil autora
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

PostWysł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 profil autora
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

PostWysł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 profil autora
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

PostWysł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 profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
cct
pijak



Dołączył: 21 Mar 2006
Posty: 202
Przeczytał: 0 tematów


PostWysł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 profil autora
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

PostWysłany: Sob 9:31, 06 Sty 2007    Temat postu:

cct: Użyj seta :wink:
Powrót do góry
Zobacz profil autora
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

PostWysł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 profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
cct
pijak



Dołączył: 21 Mar 2006
Posty: 202
Przeczytał: 0 tematów


PostWysł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 profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
cheater_
Orajt:)



Dołączył: 28 Lut 2006
Posty: 1022
Przeczytał: 0 tematów


PostWysł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 profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
cct
pijak



Dołączył: 21 Mar 2006
Posty: 202
Przeczytał: 0 tematów


PostWysł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 profil autora
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 :]

PostWysł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
Zobacz profil autora
Wyświetl posty z ostatnich:   
Napisz nowy temat   Odpowiedz do tematu    Forum Informatyka UJ forum Strona Główna -> Archiwum / 1 rok / 2 i 3 semestr - Algorytmy i Struktury Danych Wszystkie czasy w strefie EET (Europa)
Idź do strony Poprzedni  1, 2
Strona 2 z 2

 
Skocz do:  
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
Regulamin