\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}