Source: https://courses.cs.duke.edu/spring18/compsci330/Notes/mst.pdf