Afişează mesaje
|
|
Pagini: [1]
|
|
2
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 1089 TractoMarm
|
: Decembrie 05, 2010, 15:41:57
|
O optimizare este sa observi ca numarul de noduri care trebuie vizitate pentru un query poate fi mai mic. Presupunem ca dist(x) < dist(y) (altfel se inverseaza x si y). In primul rand, y si fiecare din copii lui y vor micsora suma distantelor cu dist(y) - dist(x) fiecare. Niciunul din copiii lui y nu trebuie vizitati (trebuie doar sa se calculeze cati copii are fiecare nod din arbore, lucru care se poate face in DFS-ul initial). Apoi, daca se calculeaza z = LCA(x, y), se observa ca este de ajuns sa se viziteze numai nodurile dintre y si z, mergand pe parinti (care se calculeaza tot in DFS-ul initial). Contributia copiilor nodurilor de pe calea dintre y si z (exceptand copiii care fac parte din cale) se calculeaza ca mai sus. Cu un LCA banal, se scot 40p. Nu stiu daca un LCA in O(1) ajunge pentru 100p, poate mai trebuie si alte smecherii Later edit: rationamentul de mai sus e valid, dar LCA-ul e complet inutil (de fapt, nici nu foloseam rezultatul LCA-ului). Trebuie sa fie alta smecherie pt 100p.
|
|
|
|
|
10
|
infoarena - concursuri, probleme, evaluator, articole / Algoritmiada 2009 / Răspuns: Scandura
|
: Decembrie 14, 2008, 13:17:45
|
onofrei: ai facut o rezolvare Greedy. Incearca testul: Raspunsul cu algoritmul tau cred ca o sa fie 4 + 3 + 2 = 9, raspunsul corect e 4 + 2 + 2 = 8 (tai in jumatate bucata initiala si apoi fiecare bucata din nou in jumatate). Intrebarea mea e de ce algoritmul la care m-am gandit si eu si mai multi se pare, pica jumatate din teste...
|
|
|
|
|