Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: 1553 Caves and tunnels  (Citit de 18688 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
Marius
Nu mai tace
*****

Karma: 154
Deconectat Deconectat

Mesaje: 572



Vezi Profilul
« : Octombrie 03, 2007, 16:04:57 »

http://acm.timus.ru/problem.aspx?space=1&num=1553

Se poate mai bine de O(sqrt h) pe query si O(1) pe update ? h e inaltimea arborelui. Ideea mea a fost sa folosesc ideea determinarii LCAului in O(sqrt h). Smile
Fiecare nod contine valoarea sa care se poate modifica la un update iar altele retin valoarea maxima dintre toate nodurile situate intre Level(x) + 1 si Level(x) + sqrt h. Pentru query merg in "sus" pana ajung la LCA, totul in 3 * sqrt h pasi.
Memorat

Faceti lucrurile simplu: pe cat de simplu posibil, dar nu mai simplu.
Cosmin
Echipa infoarena
Nu mai tace
*****

Karma: 351
Deconectat Deconectat

Mesaje: 1.799



Vezi Profilul
« Răspunde #1 : Octombrie 03, 2007, 20:46:48 »

Poti sa faci log n pe update si log n pe query sau log^2 n pe query. Imparti arborele in lanturi cu heavy path decomposition: e o procedura recursiva ce gaseste un lant care porneste de la radacina arborelui si merge inspre fiul care e radacina unui subarbore cu numarul cel mai mare de noduri, dupa ce ai ajuns in o frunza, aplici procedura recursiv pe ceilalti arbori ramasi. Dupa ce ai impartit arborele in lanturi, pentru a merge pana in radacina dintr-un nod trebuie sa treci prin maxim log n lanturi diferite. Pe fiecare lant faci un range query. Asa rezolvi problema cu O(log^2 n) timp pe query, si parca daca folosesti biased finger trees iese O(log n) pe query.
« Ultima modificare: Octombrie 03, 2007, 21:54:27 de către Cosmin Negruseri » Memorat
domino
Echipa infoarena
Nu mai tace
*****

Karma: 281
Deconectat Deconectat

Mesaje: 1.340



Vezi Profilul WWW
« Răspunde #2 : Octombrie 03, 2007, 20:48:34 »

Sigur poti face O(1) pe update la treaba cu sqrt() ?
Memorat
Cosmin
Echipa infoarena
Nu mai tace
*****

Karma: 351
Deconectat Deconectat

Mesaje: 1.799



Vezi Profilul
« Răspunde #3 : Octombrie 04, 2007, 08:51:32 »

Un caz nasol ar fi un arbore stea cu o radacina si n - 1 fii. Daca faci update la radacina e clar ca trebuie sa faci update la mai mult de O(1) valori.
Memorat
Marius
Nu mai tace
*****

Karma: 154
Deconectat Deconectat

Mesaje: 572



Vezi Profilul
« Răspunde #4 : Octombrie 05, 2007, 19:20:13 »

Sigur poti face O(1) pe update la treaba cu sqrt() ?

Nu, nu e bine.

Nu gasesc nimic pe internet sa ma ajute sa inteleg heavy path decomposition. Rog pe oricine are ceva material sa mi-l ofere si mie.
« Ultima modificare: Octombrie 05, 2007, 20:38:50 de către Marius Stroe » Memorat

Faceti lucrurile simplu: pe cat de simplu posibil, dar nu mai simplu.
domino
Echipa infoarena
Nu mai tace
*****

Karma: 281
Deconectat Deconectat

Mesaje: 1.340



Vezi Profilul WWW
« Răspunde #5 : Octombrie 05, 2007, 21:01:16 »

Vezi www.cs.sunysb.edu/~bender/pub/latin02-level.ps , solutia <O(n), O(lg n)>. Acolo e longest path decomposition, dar e acelasi lucru pt heavy (daca nu ma insel, heavy inseamna sa alegi subarborele cu cel mai multe noduri la fiecare pas)
Memorat
Marius
Nu mai tace
*****

Karma: 154
Deconectat Deconectat

Mesaje: 572



Vezi Profilul
« Răspunde #6 : Octombrie 06, 2007, 22:27:41 »

Multumesc. Aproape am reusit. Un TLE pe la testul 25. Sa mearga mai repede cu long path (ladder) decat cu heavy path decomposition ?
Memorat

Faceti lucrurile simplu: pe cat de simplu posibil, dar nu mai simplu.
Cosmin
Echipa infoarena
Nu mai tace
*****

Karma: 351
Deconectat Deconectat

Mesaje: 1.799



Vezi Profilul
« Răspunde #7 : Octombrie 07, 2007, 05:54:09 »

nu cred ca trebuie sa scrii diferit ... eventual da un paste la cod sa ma uit peste el si sa vedem ce poate fi imbunatatit.
Memorat
Marius
Nu mai tace
*****

Karma: 154
Deconectat Deconectat

Mesaje: 572



Vezi Profilul
« Răspunde #8 : Octombrie 07, 2007, 20:03:38 »

Nu mai e nevoie. Am reusit sa o scot in 1.1 s si 360 linii de cod.  Multumesc inca o data pentru ajutor.
Memorat

Faceti lucrurile simplu: pe cat de simplu posibil, dar nu mai simplu.
domino
Echipa infoarena
Nu mai tace
*****

Karma: 281
Deconectat Deconectat

Mesaje: 1.340



Vezi Profilul WWW
« Răspunde #9 : Octombrie 07, 2007, 20:29:34 »

Ai facut ceva special ca sa mearga asa repede?
Memorat
Marius
Nu mai tace
*****

Karma: 154
Deconectat Deconectat

Mesaje: 572



Vezi Profilul
« Răspunde #10 : Octombrie 07, 2007, 21:03:08 »

Doar am optimizat codul: am parsat citirea, iar pentru alocarea grafului si a arborilor de intervale pentru fiecare path am folosit zone dintr-un tablou "mare" declarat la inceputul programului. Pentru lca raspund in O(1) cu preprocesare in O(N log N).
Memorat

Faceti lucrurile simplu: pe cat de simplu posibil, dar nu mai simplu.
mugurelionut
De-al casei
***

Karma: 209
Deconectat Deconectat

Mesaje: 136



Vezi Profilul
« Răspunde #11 : Noiembrie 12, 2007, 19:53:13 »

O problema asemanatoare este http://www.spoj.pl/problems/QTREE/, de pe SPOJ, doar ca aici se schimba costul unei muchii, nu cel al unui nod. De curiozitate, heavy path decomposition e o tehnica cunoscuta prin comunitatea informaticienilor de pe la noi ?  Smile  Eu, personal, abia am "descoperit-o" acum vreo luna si un pic, pornind de la alte chestii [ conceptul de "path separator" ], dar mi se pare o idee foarte misto Smile
Memorat
domino
Echipa infoarena
Nu mai tace
*****

Karma: 281
Deconectat Deconectat

Mesaje: 1.340



Vezi Profilul WWW
« Răspunde #12 : Noiembrie 12, 2007, 21:12:03 »

O problema asemanatoare este http://www.spoj.pl/problems/QTREE/, de pe SPOJ, doar ca aici se schimba costul unei muchii, nu cel al unui nod. De curiozitate, heavy path decomposition e o tehnica cunoscuta prin comunitatea informaticienilor de pe la noi ?  Smile  Eu, personal, abia am "descoperit-o" acum vreo luna si un pic, pornind de la alte chestii [ conceptul de "path separator" ], dar mi se pare o idee foarte misto Smile


Eu stiam de anul trecut de chestia asta de la Cosmin, si cred ca mai stiu cativa oameni de atunci.
Memorat
Cosmin
Echipa infoarena
Nu mai tace
*****

Karma: 351
Deconectat Deconectat

Mesaje: 1.799



Vezi Profilul
« Răspunde #13 : Noiembrie 13, 2007, 07:46:06 »

Hmm, eu stiam de astea de cand era discutia cu level ancestor pe lista lu Francu prin 2003 sau 2004. Ca atunci am citit tot ce am prins legat de asta, dar QTREE e prima problema pe care am aplicat treaba cu descompunerea arborelui.
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines