Diferente pentru usaco-oct-2005-divizia-gold intre reviziile #7 si #9

Nu exista diferente intre titluri.

Diferente intre continut:

Pentru cei care nu sunt familiari cu aceasta varianta a algoritmului, ea arata cam asa:
==code(cpp) |
D{~sursa~} <- 0
p(pre). D{~sursa~} <- 0
heap_sz = 1
heap{~heap_sz~} <- sursa
pentru $i$ de la $1$ la $N$
        pentru i de la 1 la N
            daca D{~i~} > D{~x~} + cost (x, i)
                descreste_cheie (i, D{~x~} + cost (x,i))
==
Fiecare nod este extras cel mult o data din heap, si pentru fiecare muchie este apelata cel mult o data functia descreste_cheie. Fiecare dintre aceste operatii se efectueaza in {$O(lg N)$}, de aici rezultand complexitatea dorita.
Este usor de vazut ca algoritmul de mai sus produce o solutie optima, insa implementarea sa nu este foarte lejera. Putem folosi urmatoarea metoda ({$v$} este un vector in care retinem destinatiile vacilor care se afla in avion, sortate descrescator):
==code(cpp) |
sol = 0, nr <- 0
p(pre). sol = 0, nr <- 0
pentru i de la 1 la N
    cat timp nr > 0 si v{~nr~} = i
        sol <- sol + 1
        v{~nr + 1~} = distanta celei de-a j-a vaci (in ordinea crescatoare a destinatiilor) de la ferma i
        sorteaza v
        pastreaza primele maxim C pozitii din v
==
La fiecare pas, vectorul $v$ poate fi sortat folosind {@qsort (stdlib.h)@} sau {@sort (algorithm)@}. Este necesar sa adaugam in $v$ doar primele $C$ vaci de la ferma {$i$}, deoarece daca o vaca nu este intre primele $C$ din multimea vacilor de la ferma {$i$}, este evident ca nu va fi nici intre primele $C$ din reuniunea acestei multimi cu multimea vacilor aflate deja in avion.

Nu exista diferente intre securitate.

Topicul de forum nu a fost schimbat.