All the graphs here are without self-loops and parallel or anti-parallel edges. In all the algorithms, always explain their correctness and analyze their complexity. The complexity should be as small as possible. A correct algorithm with large complexity, may not get full credit. The number of vertices is denoted by n and the number of edges by m.