infoarena

infoarena - concursuri, probleme, evaluator, articole => Arhiva educationala => Subiect creat de: Marius Stroe din Noiembrie 28, 2009, 21:58:29



Titlul: 040 Lowest Common Ancestor
Scris de: Marius Stroe din Noiembrie 28, 2009, 21:58:29
Aici puteţi discuta despre problema Lowest Common Ancestor (http://infoarena.ro/problema/lca).


Titlul: Răspuns: 040 Lowest Common Ancestor
Scris de: Tirca Bogdan din Decembrie 29, 2009, 18:35:50
Cod:
Următoarea linie conţine n-1 numere naturale, cel de-al i-lea număr reprezentând tatăl nodului i+1 (nodul 1 fiind rădăcină nu are tată).
Ar trebui sa se specifice ca se incepe numaratoarea de la i=2 ca sa fie totul perfect:D. Daca se subintelege(probabil toata lumea a inteles) atunci sa ma scuzati :-'
L.E. da eu nu intelesesem cum trebuie:D


Titlul: Răspuns: 040 Lowest Common Ancestor
Scris de: Andrei Misarca din Decembrie 29, 2009, 18:43:56
Numărătoarea începe de la 1, primul număr de pe linie este tatăl nodului 2, al doilea tatăl nodului 3, etc.

@Marius: Mă cheamă Mișarca, nu Mișarcă :D


Titlul: Răspuns: 040 Lowest Common Ancestor
Scris de: Dragos din Februarie 06, 2010, 00:53:01
Ce se intampla cu evaluatorul la problema asta ? iau intre 3600 si 3700 ms si imi da TLE :| . Streamurile sunt de vina? Sau ce ca vad ca multi au luat 70 de puncte:|


Titlul: Răspuns: 040 Lowest Common Ancestor
Scris de: Andrei Misarca din Februarie 07, 2010, 11:38:34
Limita de timp este destul de strânsă  :-', dar diferenÈ›a de timp între soluÈ›ia cu RMQ È™i cea în O(NlogN + MlogN) este foarte mică. De altfel, dacă citeÈ™ti cu streamuri È™i afiÈ™ezi standard ai È™anse mari să iei 100 (http://infoarena.ro/job_detail/369281?action=view-source) È™i cu soluÈ›ii care au complexitatea logN/query :)


Titlul: Răspuns: 040 Lowest Common Ancestor
Scris de: Andreiana Andrei Daniel din Martie 04, 2010, 09:33:25
Am 3644ms pe ultimul test si imi da TLE cand limita de memorie este 3.7sec adica 3700ms  :banana: cred ca sunt vreun geniu daca am ajuns la performanta asta: sa nu mi se puncteze pe motiv de TLE ceva care intra in timp.


Titlul: Răspuns: 040 Lowest Common Ancestor
Scris de: Marius Stroe din Martie 04, 2010, 10:38:31
Am 3644ms pe ultimul test si imi da TLE cand limita de memorie este 3.7sec adica 3700ms  :banana: cred ca sunt vreun geniu daca am ajuns la performanta asta: sa nu mi se puncteze pe motiv de TLE ceva care intra in timp.

Dacă te-ai fi gândit un pic ţi-ai fi dat seama că timpii sunt estimativi. Dacă vei reuşi să creezi un evaluator ce opreşte la fix 3700ms atunci să ni-l trimiţi şi nouă. :)


Titlul: Răspuns: 040 Lowest Common Ancestor
Scris de: Gabriel Bitis din Martie 04, 2010, 10:47:28
Nu s-ar putea afisa la TLE niste timpi cu 0.2-0.3s mai mari?
Sa nu mai existe persoane intrigate de chestia asta, ca tot apare cate unul nou si iar intreaba de ce are tle pe un timp mai mic decat limita...


Titlul: Răspuns: 040 Lowest Common Ancestor
Scris de: Andrei Grigorean din Martie 04, 2010, 16:21:26
Am 3644ms pe ultimul test si imi da TLE cand limita de memorie este 3.7sec adica 3700ms  :banana: cred ca sunt vreun geniu daca am ajuns la performanta asta: sa nu mi se puncteze pe motiv de TLE ceva care intra in timp.

Dacă te-ai fi gândit un pic ţi-ai fi dat seama că timpii sunt estimativi. Dacă vei reuşi să creezi un evaluator ce opreşte la fix 3700ms atunci să ni-l trimiţi şi nouă. :)

Evaluatorul opreste la timp programul concurentului. Doar timpii afisati sunt estimativi, in realitate programul este lasat sa ruleze exact cat e limita.


Titlul: Răspuns: 040 Lowest Common Ancestor
Scris de: Cosmin Negruseri din Martie 06, 2010, 16:11:57
Nu puteti schimba codul sa afiseze timpii putin diferit sau sa puneti o explicatie acolo. Vad ca problema asta cu timpii aproximativi si programele oprite la limita de timp apare destul de frecvent pentru incepatori.


Titlul: Răspuns: 040 Lowest Common Ancestor
Scris de: Bogdan-Cristian Tataroiu din Martie 06, 2010, 21:08:56
Am modificat, apare "Limită depăşită" acum.


Titlul: Răspuns: 040 Lowest Common Ancestor
Scris de: Andrei Misarca din Martie 06, 2010, 21:17:56
Am modificat, apare "Limită depăşită" acum.

La Memory Limit Exceeded apare așa
Cod:
Limită depăşită/td>

Deși era un lucru care se cam impunea, nu pot să nu remarc că acum borderoul de evaluare arată foarte urât.


Titlul: Răspuns: 040 Lowest Common Ancestor
Scris de: Andrei-Bogdan Antonescu din Martie 06, 2010, 21:49:35
Citat
Am modificat, apare "Limită depăşită" acum.

Mai bine afisezi timpul normal +200 ms ca sa fie peste tot timpul peste limita sau pui doar "-".
Arata destul de aiurea asa.


Titlul: Răspuns: 040 Lowest Common Ancestor
Scris de: Bogdan-Cristian Tataroiu din Martie 07, 2010, 01:45:14
Am modificat, apare "Limită depăşită" acum.

La Memory Limit Exceeded apare așa
Cod:
Limită depăşită/td>

Deși era un lucru care se cam impunea, nu pot să nu remarc că acum borderoul de evaluare arată foarte urât.

Am rezolvat cu /td> :-' Am observat si eu ca arata urat dar nu prea mi se pare bine sa bag timp +200ms cum a sugerat Andrei pentru ca o sa fie oameni care o sa zica ca le merge programul mai bine / mai prost in urma unei optimizari, desi de fapt nu e relevanta diferenta. Am pus "Depasit" in loc de "Limita depasita" si arata mai ok.


Titlul: Răspuns: 040 Lowest Common Ancestor
Scris de: Ciocan Andrei din Mai 09, 2011, 16:49:06
cred ca fisierele de intrare au un spatiu in plus...dupa ce citesti cele n-1 valori


Titlul: Răspuns: 040 Lowest Common Ancestor
Scris de: Andrei Misarca din Mai 09, 2011, 21:28:03
Dap, este foarte posibil sa fie aşa, dar nu prea văd cu ce ar putea încurca citirea. Dacă va fi nevoie, voi modifica testele astfel, ca acel spaţiu să nu mai fie acolo.


Titlul: Răspuns: 040 Lowest Common Ancestor
Scris de: Alexandru-Iancu Caragicu din Iunie 04, 2011, 14:33:04
Pe TopCoder scrie ca pot fi folosite oricare 2 pozitii ale aparitiilor nodurillor din query in reprezentarea Euler a arborelui.
Eu cred ca ar trebui specificat ca se pot lua oricare aparitii, dar pentru simplitate se pot lua primele.
Asa ar parea ca primele au vreo proprietate speciala.


Titlul: Răspuns: 040 Lowest Common Ancestor
Scris de: Sunt emo din Noiembrie 04, 2011, 20:21:17
Nu vad cu ce ar putea simplifica lucrurile faptul ca alegi primele aparitii, odata ce folosesti rmq (varianta <O(n*logn),O(1)>


Titlul: Răspuns: 040 Lowest Common Ancestor
Scris de: Andrei Misarca din Noiembrie 22, 2011, 02:43:00
Am modificat timpul de execuţie, şi acum ar trebui să fie în regulă. Am să dau şi un re-eval de îndată ce revine butonul :)


Titlul: Răspuns: 040 Lowest Common Ancestor
Scris de: FMI Romila Remus Arthur din Februarie 04, 2012, 22:19:27
Timpul de executie cred ca este prea mare deoarece pe sursa O(N*M) (http://infoarena.ro/job_detail/673822?action=view-source) am luat 90pct.


Titlul: Răspuns: 040 Lowest Common Ancestor
Scris de: Visan Radu din Iunie 02, 2012, 19:09:09
Done.


Titlul: Răspuns: 040 Lowest Common Ancestor
Scris de: Bodnariuc Dan Alexandru din Iulie 17, 2012, 23:23:03
hmm nus prea bune testele cu solutie n*m iei 90 de pcte si cu o sursa gresita iei 80,plus solutia mea cu in O(n+m*sqrt) ia mai mult timp decat cea n*m;


Titlul: Răspuns: 040 Lowest Common Ancestor
Scris de: Alghisi Alessandro meitatiidirect.ro din Decembrie 03, 2013, 22:37:52
Buna , pentru o Reprezentarea Euler a unui arbore cu N noduri si M muchii , ce memorie e recomandata in alocarea vectorului care va stoca reprezentare ? [ Pura curiozitate ]


Titlul: Răspuns: 040 Lowest Common Ancestor
Scris de: Pirtoaca George Sebastian din Decembrie 04, 2013, 16:24:42
Dimensiunea vectorului ar trebui sa fie 2*m+1. Poți deduce asta dacă te gândești la cum parcurgi graful ca sa obții reprezentarea Euler.


Titlul: Răspuns: 040 Lowest Common Ancestor
Scris de: Alghisi Alessandro meitatiidirect.ro din Decembrie 04, 2013, 20:39:14
Ahh da , intradevar  :D multumesc !


Titlul: Răspuns: 040 Lowest Common Ancestor
Scris de: alex cuturela din Martie 12, 2014, 12:03:21
copiata de la alex cuturela


Titlul: Răspuns: 040 Lowest Common Ancestor
Scris de: Alexandru Valeanu din Mai 14, 2014, 14:57:12
Cred ca limita de timp este prea mare. O(N*M) ia 90p si O(M*sqrt(N)) ia 100p.
O(N*M): http://www.infoarena.ro/job_detail/1184901
O(M*sqrt(N)): http://www.infoarena.ro/job_detail/1184904


Titlul: Răspuns: 040 Lowest Common Ancestor
Scris de: Radu Szasz din Mai 14, 2014, 21:13:35
Nu conteaza. E arhiva educationala. Rezolvi problemele ca sa inveti ceva, nu ca sa scoti puncte.


Titlul: Răspuns: 040 Lowest Common Ancestor
Scris de: Alexandru Valeanu din Mai 14, 2014, 22:10:12
Ziceam ca idee.


Titlul: Răspuns: 040 Lowest Common Ancestor
Scris de: Lup Vasile din Septembrie 23, 2014, 19:07:18
Se poate sa fie probleme cu evaluatorul? Primesc 0 puncte, dar am downloadat primul test si il rezolva corect la mine pe calculator.
http://www.infoarena.ro/job_detail/1232715?action=view-source


Titlul: Răspuns: 040 Lowest Common Ancestor
Scris de: Vlad Rochian din Septembrie 24, 2014, 22:30:04
Se poate sa fie probleme cu evaluatorul? Primesc 0 puncte, dar am downloadat primul test si il rezolva corect la mine pe calculator.
http://www.infoarena.ro/job_detail/1232715?action=view-source
Un prim lucru pe care îl observ e că ai vectorul lg prea mic ;)


Titlul: Răspuns: 040 Lowest Common Ancestor
Scris de: Lup Vasile din Septembrie 25, 2014, 17:27:19
 :aha: asa e :)) Multumesc mult. Si, btw, sursa oficiala cu rmq atunci cand e trimisa da eroare de compilare.


Titlul: Răspuns: 040 Lowest Common Ancestor
Scris de: Vlad Rochian din Septembrie 26, 2014, 18:09:34
dacă înlocuiești typeof cu decltype probabil va merge (C++11 stuff) :)


Titlul: Răspuns: 040 Lowest Common Ancestor
Scris de: Butnaru George din Martie 01, 2015, 13:11:25
Ce sa intimplat cu compilatorul de la pascal,sursele care inainte luau 100 de puncte cu un timp detasat de limita acum primesc 70 de puncte cu 2 TLE.Sper ca o sa rezolvati multumesc mult :ok:


Titlul: Răspuns: 040 Lowest Common Ancestor
Scris de: Margeloiu Andrei din Martie 27, 2015, 15:12:03
Traiasca Bogdan Batog si smenul lui ! :shock:


Titlul: Răspuns: 040 Lowest Common Ancestor
Scris de: Witsel Andrei din Aprilie 04, 2015, 17:51:50
ar putea sa-mi spuna si mie ce e gresit la sursa mea ? #1415472

EDIT: Am gasit. Pusesem j<<1 in loc de 1<<j :|


Titlul: Răspuns: 040 Lowest Common Ancestor
Scris de: Ghinea Mihail Emanuel din Octombrie 20, 2015, 09:48:05
Linkul la TopCoder nu merge.
Link bun : https://www.topcoder.com/community/data-science/data-science-tutorials/range-minimum-query-and-lowest-common-ancestor/ (https://www.topcoder.com/community/data-science/data-science-tutorials/range-minimum-query-and-lowest-common-ancestor/)


Titlul: Răspuns: 040 Lowest Common Ancestor
Scris de: Popa Andrei din Octombrie 21, 2015, 20:35:19
Linkul la TopCoder nu merge.
Link bun : https://www.topcoder.com/community/data-science/data-science-tutorials/range-minimum-query-and-lowest-common-ancestor/ (https://www.topcoder.com/community/data-science/data-science-tutorials/range-minimum-query-and-lowest-common-ancestor/)

Fixed.


Titlul: Răspuns: 040 Lowest Common Ancestor
Scris de: Irimie Catalin din Martie 01, 2016, 13:50:27
Am impresia ca nu sunt concludente testele, cu http://www.infoarena.ro/job_detail/1622695 (modificata putin pentru evidentiere) nu tin cont de nivelul nodurilor si fac direct RMQ pe indicele nodurilor, si tot iau 100.

Asta ar insemna ca pentru orice nod, tatal lui are indicele < ca indicele nodului

si un exemplu de test care ar da WA pe sursa mea, dar merge pe o sursa implementata corect:
Cod:
11 5
6 1 6 6 1 4 4 2 3 3
10 11
8 9
5 11
5 6
4 2

gresesc eu pe undeva? sau e specificat asta si n-am inteles eu enuntul?


Titlul: Răspuns: 040 Lowest Common Ancestor
Scris de: Rares Cheseli din Decembrie 17, 2016, 02:23:19
Cred ca ar trebui modificata putin limita de timp deoarece am luat 100p cu dinamica de la Stramosi si intra lejer in timp (2,2sec pe testul 9)


Titlul: Răspuns: 040 Lowest Common Ancestor
Scris de: dada da din Decembrie 15, 2017, 09:30:18
Cod:
void dfs(int nod, int lev)
{
    H[++K] = nod; //nodul actual este adaugat in reprezentarea Euler a arborelui
    L[K] = lev; //se retine nivelul fiecarei pozitii din reprezentarea Euler a arborelui
    First[nod] = K; //se retine si prima aparitie a fiecarui nod in reprezentarea Euler a arborelui
     
    foreach(G[nod])
    {
        dfs(*it, lev+1);
         
        H[++K] = nod;
        L[K] = lev;
    }
}
Buna ziua ,
Daca m-ati putea ajuta cu aceasta nelamurire.
Cand se opreste aceasta functie ?
Care e conditia de oprire ?


Titlul: Răspuns: 040 Lowest Common Ancestor
Scris de: Bogdan Pop din Decembrie 19, 2017, 11:49:57
Nu e nevoie de conditie de oprire in cazul asta,deoarece daca tinem doar fiii in lista de adiacenta,functia nu va mai continua cand va ajunge intr-un nod fara fii.Poti simula asta pe foaie cu un arbore si o sa-ti dai seama mai bine.


Titlul: Răspuns: 040 Lowest Common Ancestor
Scris de: Arhire Andrei din Ianuarie 01, 2019, 21:39:28

sursele sunt aproape indentice ( structurile de date sunt la fel , ideea e aceasi  ) si totusi diferenta pe ultimul test e de 500 ms


https://infoarena.ro/job_detail/2310708
 (https://infoarena.ro/job_detail/2310708)

https://infoarena.ro/job_detail/2308666
 (https://infoarena.ro/job_detail/2308666)

rog pe cineva care are timp sa arunce o privire