Source: https://www.cs.princeton.edu/courses/archive/spr02/cs226/lectures/mst-4up.pdf