\begin{algorithm}
        \caption{Minimum Priority Queue}
        \begin{algorithmic}
        \PROCEDURE{HeapMinimum}{$A$}
            \RETURN $A[1]$
        \ENDPROCEDURE
        \STATE
        \PROCEDURE{HeapExtractMin}{$A$}
            \IF {$A.\text{heap-size} < 1$}
                \STATE \textbf{error} "heap underflow"
            \ENDIF
            \STATE $min = A[1]$
            \STATE $A[1] = A[A.\text{heap-size}]$
            \STATE $A.\text{heap-size} = A.\text{heap-size} - 1$
            \STATE \CALL{MinHeapify}{$A, 1$}
            \RETURN $min$
        \ENDPROCEDURE
        \STATE
        \PROCEDURE{HeapDecreaseKey}{$A, i, key$}
            \IF{$key > A[i]$}
                \STATE \textbf{error} "new key is larger than the current key"
            \ENDIF
            \STATE $A[i] = key$
            \WHILE{$i > 1$ \AND $A[PARENT(i)] > A[i]$}
                \STATE exchange $A[i]$ with $A[PARENT(i)]$
                \STATE $i = PARENT(i)$
            \ENDWHILE
        \ENDPROCEDURE
        \STATE
        \PROCEDURE{MinHeapInsert}{$A, key$}
            \STATE $A.\text{heap-size} = A.\text{heap-size} + 1$
            \STATE $A[A.\text{heap-size}] = +\infty$
            \STATE \CALL{HeapDecreaseKey}{$A, A.\text{heap-size}, key$}
        \ENDPROCEDURE
        \end{algorithmic}
        \end{algorithm}