Re tarde, pero me parece que funciona si guardás el nodo por el cual agregaste cada nodo a S en un arreglo parent y luego si llegas a un nodo ya explorado u, tomás el nodo v por el que llegaste a ese nodo ya explorado y seguís por parent hacia atrás hasta encontrarte con ese nodo u, luego completas el ciclo con la arista (v,u). El largo lo obtenes tomando el largo de ese camino hacia atrás + 1 por la arista (v,u), si este largo es menor que el que ya tenías, guardás el ciclo, sino lo descartás, luego seguís con BFS. De este modo ejecutas BFS de un nodo solo, luego las ejecuciones totales del for son 2m que es la suma de los grados de los nodos, y guardar un ciclo lleva a lo sumo n pasos(un ciclo puede ser a lo sumo de largo n), por cada ejecución del for. Por lo que en total tenés T(2m*n), osea O(nm).
Igualmente no se si esta correcto este algoritmo, pero es lo que se me ocurrió.